쉘 스크립트 - 범위 내에서 임의의 횟수만큼 실행

쉘 스크립트 - 범위 내에서 임의의 횟수만큼 실행

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을 생성합니다.
두 번째 부분은 $((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

관련 정보