저번에는 특별한 변수에 대해 알아보았다.
오늘은 그 다음부분 부터 작성하겠다.
변수 값의 치환
사실 이 부분을 공부할 때 이해가 잘 안되어서 매우매우매우 어려웠다..
문법 | 설명 |
${var} | 변수 값을 바꿔 넣는다. |
${var:-word} | 변수가 아직 세팅되지 않거나 공백 문자열의 경우 word를 반환한다. var에는 저장되지 않는다. |
${var:=word} | 변수가 아직 세팅되지 않거나 공백 문자열의 word를 반환한다. var에 저장된다. |
${var:?word} | 변수가 아직 세팅되지 않거나 공백 문자열의 경우 치환에 실패하고, 스탠다드 에러에 에러가 표시된다. |
${var:+word} | 변수가 세팅되지 않은 경우 word가 반환된다. var에는 저장되지 않는다. |
예시 코드를 보자
위 사진의 코드를 컴파일 하면 아래 사진과 같이 출력된다.
지금부터 줄 별로 코드를 설명하겠다. (설명하는 코드는 출력값이 아닌 작성한 코드 기준이다.)
1. var:-ddiddiriri 는 var에 할당된 값이 없거나 비어 있을때 ddiddiriri를 반환하는 것이다. var가 선언되어있지 않으므로 ddiddiriri가 반환되어 출력된다.
2. ${var} 는 변수 var의 값을 출력한다. 현재 var의 값이 없으므로 빈 문자열이 출력된다.
3. var:=ddiddiriri 는 $var이 비어있거나 설정되지 않았을때 ddiddiriri 를 출력하고, 동시에 변수에 ddiddiriri를 할당한다. 현재 var 변수가 설정되어있지 않으므로 ddiddiriri를 출력하고 var 변수가 ddiddiriri로 할당된다.
4. ${var}는 var 의 값을 출력하는데 직전에 var의 값이 ddiddiriri 가 되었기에 ddiddiriri를 출력한다.
5. unset var를 사용하여 var 변수를 제거, var 변수는 비어있는 상태가 된다.
6. var:+ddiddiriri는 var가 비어있지 않을때만 ddiddiriri를 출력하는데 직전에 unset var로 var가 비어있기 때문에 아무것도 출력되지 않는다.
7. ${var}는 현재 var 변수가 비어있기때문에 빈 문자열이 출력된다.
8. var="abcd" 로 var 변수에 "abcd" 를 할당한다.
9. var:+ddiddiriri 는 var가 비어있지 않을때 ddiddiriri를 출력하는데, 현재 var 값에 abcd를 할당해서 비어있지 않으므로 ddiddiriri를 출력한다.
10. ${var}는 변수 var의 값 abcd를 출력한다.
11. var:?error!! 는 $var 이 비어있거나 설정되지 않았을 때 error!! 를 출력하고, 스크립트를 종료한다. 현재 var 변수에 abcd 라는 값이 설정되어 있으므로 abcd 가 출력된다.
12. ${var} 가 현재 var 변수의 값을 출력하므로 "abcd"가 출력된다.
배열
다음으로는 배열에 대해 알아 보겠다. 예제 코드를 보자.
쉘 스크립트는 특이하게 배열 값을 넣어줄때 () 로 묶고 배열에 모든 인덱스 값에 엑세스할수있는 옵션인 * 과 @이 존재한다. 아래는 이 코드의 출력값이다.
잘 출력이 되는 모습이다. 그리고 #!/bin/sh 이 아닌 #!/bin/bash 이기 때문에 꼭!!!!!!!!!!!!!!!!!!!!! sh shell.sh 가 아닌
./shell.sh
로 컴파일 해야한다. 내가 이렇게 까지 강조하는 이유는 나도 삽질했기 때문이다...
오퍼레이터
shell에서는 산수연산자로 'expr 숫자 연산자 숫자'를 이용한다.
연산자 | 의미 | 예 |
+ | 덧셈 | echo `expr 10 + 20` => 30 |
- | 뺄셈 | echo `expr 20 - 10` => 10 |
\* | 제곱 | echo `expr 11 \* 11` => 121 |
/ | 나눗셈 | echo `expr 10 / 2` => 5 |
% | 나머지 | echo `expr 10 % 4` => 2 |
= | 자정 | a=$b b의 값은 a에 저장된다 |
== | 동일 | [ "$a" == "$b" ] $a과 $b가 동일하는 경우 TRUE가 반환된다. |
!= | 다름 | [ "$a" != "$b" ] $a과 $b가 동일하지 않는 경우 TRUE가 반환된다. |
비교 | 의미 | 예 |
-eq | 동일 | [ "$a" -eq "$b" ] 와 $a와 $b가 동일한 경우 TRUE가 반환된다. |
-ne | 다름 | [ "$a" -ne "$b" ] $a와 $b가 동일하지 않은 경우 TRUE가 반환된다. |
-gt | 보다 큼 | [ "$a" -gt "$b" ] $a가 $b보다 큰 경우 TRUE가 반환된다. |
-lt | 보다 작음 | [ "$a" -lt "$b" ] $a가 $b보다 작은 경우 TRUE가 반환된다. |
-ge | 보다 크거나 같거나 | [ "$a" -ge "$b" ] $a가 $b보다 크거나 같은 경우 TRUE가 반환된다. |
-le | 보다 작거나 같거나 | [ "$a" -le "$b" ] $a가 $b보다 작거나 같은 경우 TRUE가 반환된다. |
! | (이)가 아니다 | [ ! "$a" -gt "$b" ]$a가 $b보다 크지 않은 경우 TRUE가 반환된다. |
-o | 어느쪽이든 | [ "$a" -gt "$b" -o "$a" -lt "$b" ]$a가 $b보다 크거나 작은 경우 TRUE가 반환된다. (Bash 확장 / POSIX폐지 예정) |
-a | 양쪽 | [ "$a" -gt 90 -a "$a" -lt 100 ] $a가 90보다 크고 100보다는 작은 경우 TRUE가 반환된다. |
-z | 문자열이 비었는가 | [ -z "$a" ]$a에 어떤 것도 지정되지 않은 경우 TRUE가 반환된다. |
-n | 문자열이 비었는가 | [ -n "$a" ] $a에 어떠한 것이 지정되어 있다면 TRUE가 반환된다. |
옵션들이 매우 어려워 보인다...
위의 오퍼레이터를 사용하여 if 조건을 작성한다.
if 조건
- if의 작성법은 if [ 조건 ] then 커맨드 fi 이다.
- 조건과 일치할 때, then 뒤에 커맨드가 실행된다.
- 조건과 다른 경우 차례로 elif [ 조건 ]에 적힌 내용을 확인한다.
- 일치하는 조건이 없는 경우 else 다음의 커맨드가 실행된 후 종료된다.
- else가 존재하지 않는 경우, 그대로 종료된다.
아래는 if 조건문의 예시이다.
위 사진의 조건문대로 잘 작동하는 모습이다!!!'
Switch 조건문
- switch의 기초 작성법은 case 변수 in 조건or값) 커맨드 ;; esac 이다.
- 조건or값이 변수와 일치하는 경우 그 곳에 적힌 커맨드가 실행된다.
아래의 Switch 조건문 예제 코드를 보자.
아래는 위 코드의 실행 결과이다.
조건문처럼 잘 작동하는 모습이다!!!
오늘은 변수와 조건문에 대해서 알아보았다.
다음엔 반복문부터 공부하도록 하겠다.
이 글이 linux shell script 를 공부하시는 분께 조금이나마 도움이 되길 바라는 마음입니다..!!!
'system' 카테고리의 다른 글
Linux 쉘 스크립트 문법에 대해 알아보자!! (2) (0) | 2023.07.16 |
---|---|
Linux 쉘 스크립트 문법에 대해 알아보자!! (1) (2) | 2023.07.15 |