쉘스크립트(3)

장준영·2024년 11월 30일

branching

exit

  • 실행된 프로그램이 종료된 상태를 전달

0: 프로그램 또는 명령이 성공으로 종료했음을 의미
1-255: 프로그램 또는 명령어 실패로 종료했음을 의미
1: 일반에러
2: Syntax error
126: 명령을 실행할 수 없음
127: 명령이 존재하지 않음
128: 종료 시그널 +N

  • example
$cp file1
$echo $?
$sleep 100
<Ctrl><c>
$echo %?


위와같이 date를 쳤을때는 잘 종료되었다는 0 이 나오지만, 잘못 data를 치면 127로 명령어가 존재하지 않는다고 나온다.

test

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

살펴보자면

  1. x가 5보다 작으니 false
  2. x가 5보다 크지 않으니 true
  3. /etc/passwd라는 파일존재하지 않으니 false
  4. /tmp라는 디렉토리 존재하니 true

위와 같으며,
test xlt5=>[x -lt 5 => [x -gt 5]
와 같이 나타낼수도 있다.

help test로 더 많은 test연산관련 확인 가능하다.

if-then-fi

조건 명령어. command 실행결과에 따라 서로 다른 command를 실행한다.

  1. if-fi 스크립트 예시
#!/bin/bash
x=10
if test $x -gt 5
then
	echo "x is grater than 5"
fi
  1. if-then-if 스크립트 예시
#!/bin/bash
if test -e /etc/passwd
then
	ls -l /etc/passwd
else
	echo "/etc/paddwd file does not exist"
fi

case

  • $var의 값에 따라 선택해서 명령어를 실행
case "$variable"in
	pattern1) command1;;
    pattern2) command2;;
    *) command3;;
esac

위의 구조를 띄고 있다.

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

와 같이 case문 선정가능하다.

0개의 댓글