Linux/Shell Programming

07.[Linux] 쉘(shell) Branching Command

xgoo 2023. 2. 6. 03:15
반응형

Branching Command(분기 명령)

 

exit

실행된 프로그램이 종료된 상태(코드)를 전달하는 것이다.

 

명령이 종료된 직후 종료 코드는 $?변수에 저장됩니다.

따라서 $?값을 확인하면 종료 코드를 확인 할 수 있습니다.

 

 

$ sleep 100

100초 동안 멈추는 명령입니다. 이명령을 실행하는 도중 Ctrl + C로 강제로 종료 해보겠습니다.

$?의 값을 확인해본 결과 130이 나왔고 이 결과는 128 + 2(SIGINT)인 것을 알 수 있습니다.

 

정상적 종료 예

시간을 확인하는 명령을 입력하고 $?의 값을 확인해 보겠습니다.

0이 나왔고 정상적으로 종료된 것을 확인 할 수 있습니다.

 

비정상 종료 예

cp명령으로 비정상 종료 해보겠습니다.

위 사진 처럼 비정상적인 명령 입력후 확인해보니 1(일반적인 에러)가 출력되는 것을 확인 할 수 있습니다.

 

종료코드 종류

숫자 의미
0 명령이 정상적으로 종료됨
1-255 명령어 비정상적으로 종료됨
1 일반적인 에러
2 Syntax Error
126 명령을 실행 할 수 없음
127 명령 및 파일이 존재하지 않음
128+N 종료 시그널+N(kill -9 PID로 종료시 128+9=137)
N=시그널 번호

 

 

 

test

특정 x값 y값을 비교하는 비교 연산자입니다.

 

사용예시

$ test <명령어> or [ 명령어 ]

 

1) 10이 들어있는 x변수와 숫자 5를 이용해 x가 5보다 작은지를 출력해보겠습니다.

x가 5보다 크기때문에 false값인 1이 출력되는 것을 볼 수 있습니다.

다른 방법으로 [ ]를 이용해 출력할 수 있습니다.

[ ]안에 좌우로 공백을 넣고 그 공백 사이에 연산자와 각 값들을 넣어 연산을 할 수 있습니다.

 

2) /etc/ 폴더가 디렉토리인지 출력해 보겠습니다.

true를 반환하기 때문에 0이 결과 값이 되는 것을 볼 수 있습니다.

이 또한 [ ]를 이용해 사용할 수 있습니다.

연산자 종류

연산자 의미
x -eq y ( Equal ) x값과 y값이 같으면 true를 리턴
x -gt y ( Greater than ) x값이 y값보다 크면 true를 리턴
x -ge y ( Greater eqaul ) x값이 y값보다 크거나 같으면 true를 리턴
x -lt y ( Less than ) x값이 y값보다 작으면 true를 리턴
x -le y ( Less equal ) x값이 y값보다 작거나 같으면 true를 리턴
x -ne ( Not equal ) x값이 y값과 다르면 ture를 리턴
-e file ( exist ) 파일이 존재하면 true를 리턴
-d file ( Directory ) 디렉토리이면 true를 리턴
-f file ( File ) 파일이면 true를 리턴
-x file ( excute ) 파일이 실행 가능하면 true를 리턴

let

특정 x값 y값을 비교하는 산술 연산자입니다. ( 연산 기호에는 " + - * / % "가 있습니다. )

변수에 연산한 값을 넣을 때 사용합니다.

 

사용예시

 

expr(export)

expr또한 특정 x값 y값을 비교하는 산술 연산자입니다. ( 연산 기호에는 " + - * / % "가 있습니다. )

연산한 값을 바로 출력할 때 사용합니다.

 

 

사용 예시

 

if-then-else-fi

개발 언어 공부하다 보면 if문을 배우게 되는데 if문과 매우 흡사한 기능을 하는 명령입니다.

 

if 의 명령이 참일 경우 명령을 실행하고 거짓일 경우 명령문을 빠져나오게 됩니다.

if문 외에 if-else문도 있는 것처럼 쉘에서도 if-else문을 사용할 수 있습니다.

위 순서도 처럼 if의 명령이 참일경우 명령어2실행 거짓일 경우 명령어3실행되게 됩니다.

 

사용예시

1) if-then을 이용한 스크립트를 이용해 10이 들어간 변수x와 숫자 5를 비교하는 조건 명령을 실행해 보겠습니다.

x(10)변수가 5보다 크면 "greater than 5"를 출력하는 조건문을 실행하니

위 사진처럼 5보다 크기 때문에 echo 명령문이 실행된 것을 볼 수 있습니다.

 

2) if-then-else를 이용해 /bin/ 디렉토리 안에 data라는 파일을 만들고 파일이 존재하는지 출력해 보겠습니다.

위 스크립트를 실행한 결과 /bin/폴더에 data라는 파일을 만들어 주었기 때문에 참이므로

"exist"가 출력된 것을 볼 수 있습니다.

 

case

리눅스에서 case문은 개발할 때 Switch문과 비슷합니다. 변수값에 따라 특정 명령어를 실행 시킬 수 있습니다.

 

위 순서도처럼 변수에 값을 받은 뒤 그 값이 각 값에 해당하는 명령어가 실행되고

그 값들에 해당이 안된다면 기본값인 *의 명령어가 실행됩니다.

 

사용 예시

자판기를 만들어 보겠습니다. coke, water, soju

위 사진처럼 특정값에 따라 명령이 달라지는 것을 알 수 있고

특정 값에 해당이 안되면 기본 명령이 실행되는 것을 볼 수 있습니다.

 

리눅스의 모든 것을 배울 때까지 공부해봅시다.

 

반응형