모양
if [[ 조건 ]]; then
# ...
elif [[ 다른 조건 ]]; then
# ...
else
# ...
fiif 는 command 받음. 실행해서 exit code 로 분기 (0 = then, non-zero = else). [[ ... ]] 는 bash/zsh 의 test command — POSIX [ ... ] 보다 안전 (빈 변수에 잘 작동) + 연산자 더 풍부.
문자열 테스트
[[ -z "$x" ]]— 비어 있음.[[ -n "$x" ]]— 비어 있지 않음.[[ "$a" == "$b" ]]— 같음.[[ "$a" != "$b" ]]— 다름.[[ "$x" == prefix* ]]— glob 매치 ([[ ]] 안에서만).[[ "$x" =~ ^[0-9]+$ ]]— regex 매치 (bash/zsh).
숫자 테스트
[[ $a -eq $b ]]— 같음 (eq, ne, lt, le, gt, ge).(( a == b ))— 산술 context (수학에 더 깔끔).
파일 테스트
[[ -f path ]]— 일반 파일 존재.[[ -d path ]]— 디렉터리.[[ -e path ]]— 존재 (타입 무관).[[ -r path ]],-w,-x— 읽기 / 쓰기 / 실행.[[ -s path ]]— 존재 + 비어 있지 않음.
And / or
if [[ -f config.yaml && -r config.yaml ]]; then ...
if [[ -z "$NAME" || -z "$EMAIL" ]]; then ...[[ ]] 안에선 &&, || 사용. 밖에선 command 자체를 체이닝.