我正在尝试自动化使用 Xdotol 的 shell 脚本(按 B 键并随机间隔 -sec.milsec)。
我无法随机运行脚本次数(目前按计数限制为 25 次)。我正在寻找一种获取计数随机数(范围 20-45)的方法,或者任何其他想法如何获取循环迭代的随机时间数。
批次 1 - 25 次 B 键 + 随机睡眠
批次 2 - 20 次 B 键 + 随机睡眠
批次 3 - 35 次 B 键 + 随机睡眠
批次 4 - 45 次 B 键 + 随机睡眠
....
感谢您的任何帮助。
#!/bin/bash
while true; do
xdotool key b
sleep $((1 + RANDOM %1)).$((RANDOM%999))
count=$(( $count+1 ))
if [ "$count" = "25" ]; then
count=0
sleep $((1 + RANDOM % 1)).$((RANDOM%99))
echo " blah"
fi
done
根据用户 Bodo 的评论进行了更新
工作代码(从睡眠中删除小数)
#!/bin/bash
max=$((20 + RANDOM % 26))
while true; do
xdotool key b
sleep $((0 + RANDOM %1))
count=$(( $count+1 ))
if [ "$count" = "$max" ]; then
count=0
max=$((20 + RANDOM % 26))
sleep $((1 + RANDOM % 1))
echo " blah"
fi
done
答案1
您可以使用shuf
从低到高生成 n 个随机数并为循环调用函数:
#!/bin/bash
myloop () {
local count
for ((count=1;count<="${1:-0}";count++)); do
xdotool key b
sleep $((RANDOM %2)).$((RANDOM%10))$((RANDOM%10))$((RANDOM%10))
done
}
# run 4 times with random values between 20 and 45
for i in $(shuf -n 4 -i 20-45); do
myloop "$i"
done
# run 4 times with random values between 20 and 45 in increments of 5
for i in $(shuf -n 4 -i 1-5); do
myloop "$((i * 5 + 20))"
done
# run forever with random values between 20 and 45 in increments of 5
while true; do
myloop "$(( $(shuf -n 1 -i 1-5) * 5 + 20))"
done
随机睡眠的第一部分$((1 + RANDOM %1))
始终生成 1。
第二部分$((RANDOM%999))
生成 0 到 998 之间的值。
我将其更改为$((RANDOM %2)).$((RANDOM%10))$((RANDOM%10))$((RANDOM%10))
生成 0 到 1.999 之间的值。
答案2
您可以设置一个变量,例如max
设置一个随机数并与该变量进行比较。
#!/bin/bash
max=$((20 + RANDOM % 26))
while true; do
xdotool key b
sleep $((1 + RANDOM %1)).$((RANDOM%999))
count=$(( $count+1 ))
if [ "$count" = "$max" ]; then
count=0
max=$((20 + RANDOM % 26))
sleep $((1 + RANDOM % 1)).$((RANDOM%99))
echo " blah"
fi
done
请注意,sleep
不仅仅支持整数。我没有修复这个错误。
另一种选择是使用两个嵌套循环。
#!/bin/bash
while true; do
count=$((20 + RANDOM % 26))
while [ "$count" -gt 0 ]; do
xdotool key b
sleep $((1 + RANDOM %1)).$((RANDOM%999))
count=$(( $count-1 ))
done
sleep $((1 + RANDOM % 1)).$((RANDOM%99))
echo " blah"
done