본문 바로가기
OS/Linux Server

[Shell Programming] 8. Branching

by Haengsin 2022. 3. 8.
Branching

1. exit 

  • 실행된 프로그램이 종료된 상태를 전달 // 모든 명령어는 종료될 떄 종료 코드를 발생.
    • exit <숫자>  

           0              : 프로그램 또는 명령이 성공으로 종료했음을 의미

           1-255        : 프로그램 또는 명령이 실패로 종료했음을 의미

                     1           : 일반 에러

                     2           : Syntax error

                     126        : 명령을 실행할 수 없음

                     127        : 명령 (파일)이 존재하지 않음.

                     128+N    : 종료 시그널 + N (Kill -9 PID 로 종료 시 128+9=137)

  • $?      : 종료 값 출력.

 

  • Example
[centos@linux-mypc ~]$ date > /dev/null
[centos@linux-mypc ~]$ echo $?
0
# 정상 종료 => 0


[centos@linux-mypc ~]$ cp file1
cp: missing destination file operand after ‘file1’
Try 'cp --help' for more information.
[centos@linux-mypc ~]$ echo $?
1


[centos@linux-mypc ~]$ sleep 100
^C
[centos@linux-mypc ~]$ echo $?
0

 

2. test

  • 비교 연산자
    • test <명령어> or [명령어]
  • 명령어 실행 결과를 true(0) 또는 false(1)로 return 한다.
  • test 명령어는 다양한 연산자를 지원한다.
연산자 설명
x –eq y x값과 y값이 같으면 truereturn
x gt y x값과 y값보다 크면 truereturn
x –ge y x값과 y값보다 크거나 같으면 truereturn
x –lt y x값과 y값보다 작으면 truereturn
x –le y x값과 y값보다 작거나 같으면 truereturn
x –ne x값과 y값이 같지 않으면 truereturn
-e file 파일이 존재하면 truereturn
-d file 파일이 디렉토리이면 truereturn
-f file 파일이 디렉토리이면 truereturn
-x file 파일이 디렉토리이면 truereturn

 

  • Example
[centos@linux-mypc ~]$ test $x -gt 5
[centos@linux-mypc ~]$ echo $?
0

[centos@linux-mypc ~]$ test $x -lt 5
[centos@linux-mypc ~]$ echo $?
1

[centos@linux-mypc ~]$ test -d 2022-03.txt
[centos@linux-mypc ~]$ echo $?
1

[centos@linux-mypc ~]$ [ $x -lt 5 ]
[centos@linux-mypc ~]$ echo $?
1

[centos@linux-mypc ~]$ [ -d /tmp ]
[centos@linux-mypc ~]$ echo $?
0

[centos@linux-mypc ~]$ let sum=5+5
[centos@linux-mypc ~]$ echo $sum
10

[centos@linux-mypc ~]$ let mul=5*5
[centos@linux-mypc ~]$ echo $mul
25

 

3. if-then

if [조건문]
     then

         command1
     else
         command2
fi

 

  • Example
x=10
if test $x -gt 5
then
  echo "x is greater than 5"
fi


[centos@linux-mypc ~]$ if test $x -gt 11; then echo "x if greater than 11"; else echo "x is less than 11"; fi
x is less than 11
[centos@linux-mypc ~]$ if test -e /etc/passwd
> then ls -l /etc/passwd
> else echo "/etc/passwd file does not directory"
> fi
-rw-r--r-- 1 root root 1166 Feb 16 10:25 /etc/passwd


[centos@linux-mypc bin]$ cat exam.sh
#!/bin/bash
#x=3
if test $1 -gt 5
then
  echo "x is greater than 5"
else
  echo "x is less than 5"
fi


[centos@linux-mypc bin]$ cat exam2.sh
#!/bin/bash
#x=3
if [ $1 -gt 5 ]
then
  echo "x is greater than 5"
else
  echo "x is less than 5"
fi

 

 

4. case

  • $var 의 값에 따라 선택해서 명령어를 실행

  case "$variable" in
     pattern1) command1;;
     pattern2) command2;;
     *) command3;;
  esac 

 

  • Example
[centos@linux-mypc bin]$ cat case.sh
#!/bin/bash

echo -n "What do you want?"
read answer
case $answer in
  yes) echo "System Restart.";;
  no) echo "Shutdown the system";;
  *) echo "entered incorrectly";;
esac



[centos@linux-mypc bin]$ case.sh
What do you want?yes
System Restart.
[centos@linux-mypc bin]$ case.sh
What do you want?no
Shutdown the system
[centos@linux-mypc bin]$ case.sh
What do you want?r
entered incorrectly

 

※ 예제

[centos@linux-mypc bin]$ cat case2.sh
#!/bin/bash
#: Usage
# cat << END = cat << END ~~ END(앞에 띄어쓰기 없어야 함) 한꺼번에 입력받아서 출력하기.
cat << END
============================
Please Select a Number
----------------------------
1: Check disk usage
2: Check the login user list
----------------------------
END
echo -n "number:"
read number
case $number in
1) df -h;;
2) who;;
*) echo "Bad Request!"
 exit 1
esac
exit 0


[centos@linux-mypc bin]$ case2.sh
============================
Please Select a Number
----------------------------
1: Check disk usage
2: Check the login user list
----------------------------
number:1
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        1.9G     0  1.9G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  8.6M  1.9G   1% /run
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/vda1       100G  2.5G   98G   3% /
/dev/vdb1        50G   53M   47G   1% /disk0
/dev/vdc2       103G   61M   98G   1% /disk2
/dev/vdc1        94G   61M   89G   1% /disk1
/dev/vdd1        99G   61M   94G   1% /disk3
tmpfs           379M     0  379M   0% /run/user/1000


[centos@linux-mypc bin]$ case2.sh
============================
Please Select a Number
----------------------------
1: Check disk usage
2: Check the login user list
----------------------------
number:2
centos   pts/0        2022-03-10 13:13 (119.69.107.112)


[centos@linux-mypc bin]$ case2.sh
============================
Please Select a Number
----------------------------
1: Check disk usage
2: Check the login user list
----------------------------
number:3
Bad Request!

 

Reference

- https://www.youtube.com/watch?v=hG9T3K00qiE&list=PLApuRlvrZKog2XlvGJQh9KY8ePCvUG7Je&index=9