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
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)