Linux 쉘 스크립트 문법에 대해 알아보자!! (3)

2023. 7. 17. 18:04·system

저번에는 특별한 변수에 대해 알아보았다.

오늘은 그 다음부분 부터 작성하겠다.

 

 

변수 값의 치환

사실 이 부분을 공부할 때 이해가 잘 안되어서 매우매우매우 어려웠다..

 

문법 설명
${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 조건문의 예시이다.

-gt 는 $1이 $2보다 클때 true, -eq는 $1이 $2와 동일할때 true 이다.

위 사진의 조건문대로 잘 작동하는 모습이다!!!'

 

 

Switch 조건문

 

- switch의 기초 작성법은 case 변수 in 조건or값) 커맨드 ;; esac 이다.

 

 

- 조건or값이 변수와 일치하는 경우 그 곳에 적힌 커맨드가 실행된다.

 

아래의 Switch 조건문 예제 코드를 보자.

아래는 위 코드의 실행 결과이다.

조건문처럼 잘 작동하는 모습이다!!!

 

 

 

 

오늘은 변수와 조건문에 대해서 알아보았다.

다음엔 반복문부터 공부하도록 하겠다.

이 글이 linux shell script 를 공부하시는 분께 조금이나마 도움이 되길 바라는 마음입니다..!!!

'system' 카테고리의 다른 글

Linux 쉘 스크립트 문법에 대해 알아보자!! (2)  (0) 2023.07.16
Linux 쉘 스크립트 문법에 대해 알아보자!! (1)  (2) 2023.07.15
'system' 카테고리의 다른 글
  • Linux 쉘 스크립트 문법에 대해 알아보자!! (2)
  • Linux 쉘 스크립트 문법에 대해 알아보자!! (1)
j.sanghyuk
j.sanghyuk
  • j.sanghyuk
    보안의 유망주 정상혁
    j.sanghyuk
  • 전체
    오늘
    어제
    • 분류 전체보기 (42)
      • network (15)
      • system (3)
      • web (1)
      • Dreamhack (1)
      • OS (5)
      • CA (7)
      • GSM (3)
      • 지방기능경기대회 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    기능대회
    dns 캐시 중독
    우분투
    transport layer secure
    사이버보안
    Security
    linux
    Network
    linux Shell script
    dreamhack
    회고록
    dns 중독
    GSM
    ai-ing-ping
    시스템
    script
    OS
    UDP
    OSI 7계층
    tcp/ip 4 계층
    TCP
    secure socker layer
    네트워크 엑세스
    기능경기대회
    리눅스
    DNS
    네트워크
    Shell
    osi 7계층 이란?
    드림핵
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
j.sanghyuk
Linux 쉘 스크립트 문법에 대해 알아보자!! (3)
상단으로

티스토리툴바