Bash에서 값을 생성한 후 난수

Bash에서 값을 생성한 후 난수

내 컴퓨터가 일부 파일을 자동으로 다운로드하기를 원합니다. 이것이 반드시 매우 효율적인 것은 아닙니다. 그래서 저는 이를 위해 bash 스크립트를 사용하기로 결정했습니다.

지금까지 URL을 인코딩할 때 거의 문제가 없었습니다. 하지만 불규칙한 순서로 파일을 검색하고 싶고 간단한 변수를 사용하겠다고 생각했습니다. 변수에 난수를 어떻게 넣나요?

내 방법

data_link0="https://example.com/target1.html"
data_link1="https://example.com/target2.html"
data_link2="https://example.com/target3.html"
data_link3="https://example.com/target4.html"

useragent0="Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A403 Safari/602.1"
useragent1="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6"
useragent3="Mozilla/5.0 (Windows 7; ) Gecko/geckotrail Firefox/firefoxversion"

wget --user-agent="$user_agent[$((RANDOM % 3))]" "$datei_link$((RANDOM % 3))"

불행히도 작동하지 않습니다.

답변1

모든 URL을 검색해야 하는 경우 더 좋은 방법은 다음을 사용하는 것입니다.(GNU/linux coreutils) (또는 sort -Rcoreutils):

shuf file | xargs wget

문서:

$ cat file
"https://example.com/target1.html"
"https://example.com/target2.html"
"https://example.com/target3.html"
"https://example.com/target4.html"

man 1 shuf

이름

shuf - 무작위 순열 생성


새로운 의견, 새로운 요구 사항, 새로운 코드:

(임의의 사용자 에이전트 필요)

$ cat uas
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.100
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko

암호:

shuf file | while read url; do
    wget --user-agent="$(shuf -n1 uas)" "$url"
done

자신만의 방식으로 유지하려면(URL):

data_link=(
    "https://example.com/target1.html"
    "https://example.com/target2.html"
    "https://example.com/target3.html"
    "https://example.com/target4.html"
)
user_agent=(
    "Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A403 Safari/602.1"
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6"
    "Mozilla/5.0 (Windows 7; ) Gecko/geckotrail Firefox/firefoxversion"
)

wget --user-agent="${user_agent[RANDOM % ${#user_agent[@]} ]}" "${data_link[RANDOM % ${#data_link[@]}]}"

모든 URL 및 사용자 에이전트에 대한 방법(모두 무작위):

for i in $(seq 0 $((${#data_link[@]} -1)) | shuf); do
    wget -U "${user_agent[RANDOM % ${#user_agent[@]}]}" "${data_link[i]}"
done

답변2

각 문자열에 대해 별도의 변수를 정의하는 대신 배열을 정의하십시오. ${ar[123]}배열의 요소 123에 액세스 ar하고 ${#ar[@]}배열의 크기를 가져오는 데 사용됩니다 .

data_link=(
    "https://example.com/target1.html"
    "https://example.com/target2.html"
    "https://example.com/target3.html"
    "https://example.com/target4.html"
)
user_agent=(
    "Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A403 Safari/602.1"
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6"
    "Mozilla/5.0 (Windows 7; ) Gecko/geckotrail Firefox/firefoxversion"
)

wget --user-agent="${user_agent[RANDOM % ${#user_agent[@]}]}" "${data_link[RANDOM % ${#data_link[@]}]}"

관련 정보