for — 목록 순회
for f in *.txt; do
echo "processing $f"
done목록은 무엇이든: glob 결과, 명시 목록, command substitution, 배열.
for — 범위
# C 스타일 (bash/zsh)
for ((i=0; i<10; i++)); do echo $i; done
# brace expansion
for i in {1..10}; do echo $i; done
for i in {1..10..2}; do echo $i; done # stepfor — 배열
files=("a.txt" "b.txt" "c.txt")
for f in "${files[@]}"; do echo "$f"; done"${arr[@]}" 가 원소당 quoted token 하나씩 펼침. "${arr[*]}" 는 IFS 로 합쳐 하나의 문자열 — 거의 항상 잘못.
while
i=0
while [[ $i -lt 5 ]]; do
echo $i
((i++))
done
# 파일을 줄 단위로 읽기
while IFS= read -r line; do
echo "> $line"
done < input.txtIFS= read -r 가 안전 형 — 앞뒤 공백, backslash 보존. 모든 줄별 파일 읽기에.
until — while 의 역
until ping -c1 server.local; do
echo 'waiting...'
sleep 5
donebreak / continue
break 가 현재 루프 종료. break 2 는 중첩 두 단계 종료. continue 는 다음 iteration 으로 건너뜀.