シェルスクリプト - 範囲内で任意の回数だけ実行

シェルスクリプト - 範囲内で任意の回数だけ実行

Xdotolを使用してシェルスクリプトを自動化しようとしています(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を生成します。
2番目の部分は$((RANDOM%999))0から998の値を生成します。

$((RANDOM %2)).$((RANDOM%10))$((RANDOM%10))$((RANDOM%10))0から1.999までの値を生成するように変更しました。

おすすめ記事