Shell 脚本 - 在范围内随机运行次数

Shell 脚本 - 在范围内随机运行次数

我正在尝试自动化使用 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

相关内容