Bash에서 'for' 루프를 어떻게 쓰죠?
다음과 같은 기본 루프를 찾고 있습니다.
for(int i = 0; i < MAX; i++) {
doSomething(i);
}
배쉬를 위해서요
이 사이트에서:
for i in $(seq 1 10);
do
echo $i
done
for ((i = 0 ; i < max ; i++ )); do echo "$i"; done
배쉬for
는 변수(반복자)와 반복자가 반복할 수 있는 단어 목록으로 구성됩니다.
따라서 단어 목록이 한정되어 있는 경우 다음 구문에 넣기만 하면 됩니다.
for w in word1 word2 word3
do
doSomething($w)
done
아마 몇 가지 숫자를 따라 반복하고 싶을 겁니다. 그러면seq
명령어를 사용하여 번호 목록을 생성합니다. (예: 1 ~100 ) 。
seq 1 100
for 루프에서 사용합니다.
for n in $(seq 1 100)
do
doSomething($n)
done
주의:$(...)
구문을 사용합니다.이것은 Bash 동작으로, 1개의 커맨드의 출력을 전달할 수 있습니다(이 경우는seq
)를 다른 (the)에 접속합니다.for
).
이것은, 다음과 같이, 특정의 패스의 모든 디렉토리에 대해서 반복할 필요가 있는 경우에 매우 편리합니다.
for d in $(find $somepath -type d)
do
doSomething($d)
done
목록을 생성할 가능성은 무한합니다.
Bash 3.0+ 에서는, 다음의 구문을 사용할 수 있습니다.
for i in {1..10} ; do ... ; done
...이것에 의해, 시퀀스를 확장하기 위한 외부 프로그램의 산란이 회피됩니다(예를 들면,seq 1 10
).
물론 이 문제는 이 문제와 같습니다.for(())
Bash 및 특정 버전(이것이 중요한 경우)에 관련지어져 있습니다.
Bash 내장 도움말을 사용해 보십시오.
help for
산출량
for: for NAME [in WORDS ... ;] do COMMANDS; done
The `for' loop executes a sequence of commands for each member in a
list of items. If `in WORDS ...;' is not present, then `in "$@"' is
assumed. For each element in WORDS, NAME is set to that element, and
the COMMANDS are executed.
for ((: for (( exp1; exp2; exp3 )); do COMMANDS; done
Equivalent to
(( EXP1 ))
while (( EXP2 )); do
COMMANDS
(( EXP3 ))
done
EXP1, EXP2, and EXP3 are arithmetic expressions. If any expression is
omitted, it behaves as if it evaluates to 1.
#! /bin/bash
function do_something {
echo value=${1}
}
MAX=4
for (( i=0; i<MAX; i++ )) ; {
do_something ${i}
}
다음은 오래된 쉘에서도 사용할 수 있는 동시에 많은 수의 셸에서도 사용할 수 있는 예입니다.
Z=$(date) awk 'BEGIN { for ( i=0; i<4; i++ ) { print i,"hello",ENVIRON["Z"]; } }'
하지만 안에서 도움이 되는 일을 잘 해내길 빈다.awk
: awk 스크립트에서 셸 변수를 사용하려면 어떻게 해야 합니까?
나는 일반적으로 루프 규격에 약간의 변형을 사용하는 것을 좋아한다.이 명령어를 사용하여 일련의 리모트호스트에서 명령을 실행하는 경우가 많습니다.Bash의 브레이스 확장을 이용하여 루프에 대해 비숫자를 생성할 수 있는 루프를 만듭니다.
예:
프런트 엔드 호스트1 ~ 5 및 백엔드 호스트1 ~ 3에서 uptime 명령을 실행합니다.
% for host in {frontend{1..5},backend{1..3}}.mycompany.com
do ssh $host "echo -n $host; uptime"
done
일반적으로 위의 읽기 쉬운 버전이 아니라 행 끝에 세미콜론이 있는 단일 행 명령어로 실행합니다.중요한 사용상의 고려사항은 괄호를 사용하여 문자열에 삽입할 여러 값(예: pre{foo,bar}post 결과 프리푸스트, prebarpost)을 지정하고 이중 마침표를 사용하여 카운트/시퀀스를 수행할 수 있다는 것입니다(a..z 등 사용 가능).단, 이중 마침표 구문은 Bash 3.0의 새로운 기능입니다.이전 버전에서는 지원되지 않습니다.
Bash에만 관심이 있다면 위의 "for(...)" 솔루션이 가장 좋지만, 모든 Unice에서 동작하는 POSIX SH에 준거한 것을 원한다면 "expr"과 "while"을 사용해야 합니다. 왜냐하면 "()이나 "seq" 또는 "i=i+1"은 다양한 셸 중에서 이식 가능한 것이 아니기 때문입니다.
파일을 처리하기 위해 항상 이 변형을 사용합니다.
*.log 파일의 경우, "Do stupping with: $files", "Do more stupping with: $files", "Do more stupping with: $files", "done";
파일 목록 처리에 관심이 있는 경우 파일의 -execdir 옵션을 확인합니다.
언급URL : https://stackoverflow.com/questions/49110/how-do-i-write-a-for-loop-in-bash
'sourcecode' 카테고리의 다른 글
C#은 JavaScript 인코딩과 동등합니까?URIComponent()? (0) | 2023.04.14 |
---|---|
다운스트림과 업스트림의 정의 (0) | 2023.04.14 |
Dapper ORM을 사용하여 * FROM X WHERE ID IN (...)를 선택합니다. (0) | 2023.04.14 |
여러 개의 "with"를 사용할 수 있습니까? (0) | 2023.04.14 |
git root 디렉토리를 하나의 명령어로 얻을 수 있는 방법이 있나요? (0) | 2023.04.14 |