if [ 첫 번째 조건식 ]
then
수행문
elif [ 두 번째 조건식 ]
then
수행문
else
수행문
fi
[]와 조건식 사이에는 반드시 한 칸의 스페이스를 두어야 한다.
;)은 문법이나 명령어 또는 구문이 완료되어 다음 줄로 넘길 경우에 사용한다. 예제에서는 [ $변수 연산자 $변수 ] 다음에 바로 then이 오는 것이 아니라 다음 줄에 왔기 때문에 사용되지 않는다. 

-z는 변수에 저장된 값의 길이가 0인지를 비교하여 0이라면 True를, 아니라면 False를 리턴하는 문자열 연산자.
-gt는 A가 B보다 큰지 비교하는 연산자-lt는 A가 B보다 작은지 비교하는 연산자&&는 AND 연산case $변수 in
조건값1)
수행문1 ;;
조건값2)
수행문2 ;;
조건값3)
수행문3 ;;
*)
수행문4
esac

for 변수 in [ 범위(리스트 또는 배열, 묶음 등) ]
do
반복할 수행문
done



{}를 사용하여 반복문의 범위 값을 모두 나열하지 않고 생략하기

주의: 배열 선언시 값과 값 사이의 쉼표,를 사용하면 안되며, for문 배열의 모든 아이템을 범위로 사용할 경우 ${배열[@]}을 사용하여 배열의 모든 아이템을 사용한다고 명시해야 한다.for ((변수=초기값; 조건식; 증가값))
do
반복할 수행문
done

while [ $변수1 연산자 $변수2 ]
do
반복할 수행문
done
주의: while문을 사용할 경우, 변수가 조건에 맞도록 증가식(e.g. num=$((num+1)))을 꼭 넣어줘야 한다. 그렇지 않을 경우 무한 루프에 빠질 수 있다.-z: 문자열 길이가 0이면 True-n: 문자열 길이가 0이 아니면 True
** 책 속 예제와 달리 변수를 쌍따옴표""로 감싸야 정상 작동한다. 아닐 경우 파라미터가 있든, 없든 True가 출력되었다.-eq: 변수1과 변수2의 값이 같으면 참(=, equals)
-ne: 변수1과 변수2의 값이 다르면 참(!=, not equal to)
-gt: 변수1의 값이 변수2의 값보다 크면 참(greater than)
-ge: 변수1의 값이 변수2의 값보다 크거나 같으면 참(greater than or equal to)
-lt: 변수1의 값이 변수2의 값보다 작으면 참(less than)
-le: 변수1의 값이 변수2의 값보다 작거나 같으면 참(less than or equal to)
아래 기호를 사용할 경우, 리다이렉션 기호와 구별하기 위해 반드시 중첩소괄호(())를 사용해야 한다.
>: 변수1의 값이 변수2의 값보다 크면 참
>=: 변수1의 값이 변수2의 값보다 크거나 같으면 참
<: 변수1의 값이 변수2의 값보다 작으면 참
<=: 변수1의 값이 변수2의 값보다 작거나 같으면 참
<> 기호를 사용할 경우에는 구분을 위해 중첩 대괄호[[]]를 사용한다.=: 각 변수의 값이 같으면 참, 동일한 문자열일 경우 참==: 각 변수의 값이 같으면 참, 동일한 문자열일 경우 참!=: 각 변수의 값이 다르면 참, 서로 다른 문자열일 경우 참>: 변수1의 ASCII 코드값이 변수2보다 크면 참<: 변수1의 ASCII 코드값이 변수2보다 작으면 참-a: AND 연산. 조건식 1도 참이고, 조건식 2도 참이면 참. 조건식은 논리 연산자를 제외한 다른 연산자를 사용하는 경우를 말함
-o: OR 연산. 조건식 1이 참이거나 조건식 2가 참이면 참
[]를 사용하거나 중첩 대괄호[[]]를 사용해야 한다.&&: AND 연산
||: OR 연산
변수 유형이 디렉터리일 경우 사용할 수 있는 연산자
-d: 변수 유형이 디렉터리면 참-e: 변수 유형이 디렉터리이거나 파일이면 참파일이 가지고 있는 다양한 속성들을 체크하는 연산자
-f: 변수 유형이 파일이면 참-L: 변수 유형이 파일이면서 심볼릭 링크이면 참-r: 변수 유형이 파일이거나 디렉터리이면서 읽기 권한이 있으면 참-w: 변수 유형이 파일이거나 디렉터리이면서 쓰기 권한이 있으면 참-x: 변수 유형이 파일이거나 디렉터리이면서 실행 권한이 있으면 참-s: 변수 유형이 파일이거나 디렉터리이면서 사이즈가 0보다 크면 참-O: 변수 유형이 파일이거나 디렉터리이면서 스크립트 실행 소유자와 동일하면 참-G: 변수 유형이 파일이거나 디렉터리이면서 스크립트 실행 그룹과 동일하면 참두 개의 변수에 정의된 파일을 비교하는 연산자
-nt: 변수 유형이 파일이면서, 변수1이 변수2보다 최신 파일이면 참-ot: 변수 유형이 파일이면서, 변수1이 변수2보다 이전 파일이면 참-ef: 변수 유형이 파일이면서, 변수1과 변수2가 동일 파일이면 참패턴을 기술하기 위한 다양한 메타 문자들
.: 뉴라인을 제외한 한 개의 문자와 일치함?: 자신 앞에 나오는 정규 표현식이 없거나 하나가 일치하며, 대부분 한 개의 문자와 매칭할 때 사용함*: 바로 앞 문자열이나 정규 표현식에서 한번 이상 반복되는 문자+: 자신 앞에 나오는 하나 이상의 정규 표현식과 일치함. *과 비슷하게 동작하지만 반드시 하나 이상일 경우에만 일치함.{N}: 정확히 N번 일치함{N,M}: N번 또는 그 이상 일치함-: A부터 Z를 A-Z로 표현하듯, 알파벳이나 숫자의 범위를 나타낼 때 사용^: 라인의 시작에서 공백 문자열을 의미함. 또한 목록의 범위에 없는 문자들을 의미함$: 라인 마지막에서 공백 문자열을 의미함^$: 빈 줄과 일치함[...]: 대괄호는 단일 정규 표현식에서 문자들을 집합으로 묶어줌\: 특수 문자를 원래의 문자 의미대로 해석함\b: 단어 끝의 공백 문자열을 의미함\B: 라인 끝의 공백 문자열을 의미함\<: 단어 시작에서 공백 문자열을 의미함\>: 라인 끝에서 공백 문자열을 의미찾고자 하는 문자열의 종류
[:alnum:]: 알파벳이나 숫자로 이루어진 문자열. [A-Za-z0-9]와 같은 표현임[:alpha:]: 알파벳 문자를 의미하며 [A-Za-z]와 같은 표현임[:blank:]: 스페이스나 탭을 의미함[:cntrl:]: 제어 문자들을 의미함[:digit:]: 0~9 사이의 숫자를 의미함 [0-9]와 같은 표현임[:graph:]: 출력 가능한 그래픽 문자들로 ASCII 33~126 사이의 문자들과 일치함. 스페이스 및 제어 문자들을 제외한 [:print:]와 같음[:print:]: 출력 가능한 그래픽 문자들로 ASCII 32~126 사이의 문자들과 일치함. [:graph:]와 비슷하지만 스페이스 문자를 포함[:punct:]: 문장 부호 문자들을 의미함[:space:]: 뉴라인 줄바꿈, 스페이스, 탭과 같은 모든 공백 문자들을 의미함[:upper:]: 알파벳 대문자를 의미하며 [A-Z]와 같은 표현임[:lower:]: 알파벳 소문자를 의미하며 [a-z]와 같은 표현임[:xdgit:]: 16진수의 숫자와 문자를 의미하며 [0-9a-fA-F]와 같은 표현임📌 장현정 지음, 『처음 배우는 셸 스크립트』, 한빛미디어(2021)