Shell - 8.Branching command
참고 강의 : TTABAE-LEARN
Contents
- 8-1. exit
- 8-2. test
- 8-3. if-then
- 8-4. case
8-1. exit
모든 명령어는 종료될 때 종료코드를 발생시킴 ( 종료 상태 전달 )
exit <숫자>
- 숫자
- 0 : 성공적으로 종료
- 1~255 : 실패로 종료
- 1 : 일반 에러
- 2 : Syntax error
- 126 : 명령 실해 ㅇ불가
- 127 : 명령 존재 X
- 128+N : 종료시그널+N
- ex) kill -9 PID로 종료 시, 128+9 = 137
$?
: 종료값 출력echo $?
: 바로 전에 실행했던 명령어의 종료 코드 출력
example
$ date
$ echo $?
# 바로 전에 실행했던 명령어의 종료 코드
0
$ data
$ echo $?
127
$ copy from_file
$ echo $?
1
$ sleep 100
<ctrl><c>
$ echo %?
130
8-2. test
비교 연산자
test <명령어> or [명령]
- 결과를 0(true) or 1(false) 로 return
example
$ x=10
$ test $x -lt 5
$ echo $?
1
$ test $x -gt 5
$ echo $?
0
$ test -e /etc/passwd # exist 여부
$ echo $?
0
$ test -f /tmp # 파일이니?
$ echo $?
1
$ test -d /tmp # 경로니?
$ echo $?
0
혹은
$ [ $x -lt 5 ]
$ [ $x -gt 5 ]
$ [ -e /etc/passwd ]
$ [ -f /tmp ]
( test 비교연산자 )
let, expr : 산술연산자
$ let sum=5+5
$ echo $sum
10
$ let multi=5*5
$ echo $multi
25
8-3. if-then
if-then문 예시 (1)
$ cat > if-exam1.sh
#! /bin/bash
x=10
if test $x -gt 5
then
echo "x is greater than 5"
fi
$ chmod +x if-exam1.sh
$ if-exam1.sh
x is greater than 5
if-then문 예시 (2)
$ cat > if-exam2.sh
echo -n "input number: "
read x
if [ $x -gt 5 ]
then
echo "x is greater than 5"
fi
$ chmod +x if-exam1.sh
$ if-exam1.sh
input number : 10
x is greater than 5
$ if-exam1.sh
input number : 3
8-4. case
$var
의 값에 따라 선택해서 명령어를 실행
case "$variable" in
pattern1) command1 ;;
pattern2) command2 ;;
*) command3 ;;
esac
example
$ cat > case-exam1.sh
echo -n "what do you want?"
read answer
case $answer in
yes) echo "System restart";;
no) echo "Shutdown the system";;
*) echo "Entered incorrectly";;
esac
$ chmod +x case-exam1.sh
$ case-exam1.sh
what do you want? yes
System restart
$ case-exam1.sh
what do you want? no
Shutdown the system
$ case-exam1.sh
what do you want? YES
Entered incorrectly