본문 바로가기
프로그래밍 언어/Shell script(BASH)

[Shell scripts] 기본적인 스크립트 제어 (if, for, where, case)

by Physics 2021. 5. 17.
728x90

1. if 문 

1) if 문의 구조 

if [condition 1]; then
	<command set 1>
elif [condition 2]; then 
	<command set 2>
elif [condition 3]; then 
 	<command set 3> 
else 
	<command set 4>
fi  

 

2) 일반적인 프로그래밍 언어과 if 문의 차이점 
  • 일반적인 프로그래밍 언어: if 문의 조건문은 True/False 값을 평가하는 표현식 
  • BASH 쉘에서의 if문 
    - 각 조건문에서 명령의 종료상태가 0이면 (명령이 성공적으로 완료됨을 의미), then 이하를 실행 
    - if 문의 condition은 세 가지 종류의 조건을 평가할 수 있다: 숫자비교, 문자열 비교, 파일 비교 
    -
Condition에서 앞 뒤 대괄호와 조건문 사이에는 빈칸이 반드시 한 칸이 떨어져 있어야 한다: "[ condition ]"  

3) if 문의 복합 테스트 
  [ condition1 ] && [ condition2 ] 
  [ condition1 ] || [ condition2 ]  
  - 복합 테스트를 사용해서 부울 논리를 사용할 수 있다. 이때, 부울 논리는 가능한 반환값이 TRUE/FALSE로 한정된다. 

4) 

5) 이중 대괄호: [[]]  
  - 이중 대괄호를 통해서, 문자열에 대한 패턴 일치를 조건문으로 사용할 수 있음 
  - example) 

if [[ $USER == r* ]]; then
	echo "Hello $USER"
else
	echo "Sorry, I don't know you"
fi

 

조건문에 자주 사용되는 비교 연산자 

1) 정수 비교 연산자
  Bash 쉘에서 처리할 수 있는 숫자는 정수 뿐이므로, 실수를 조건 테스트하기 위해선, 다른 방법으로 우회해서 사용해야 한다. 

연산자 설명
-lt F
-le 작거나 크다
-eq 크기가 같다
-ge 크거나 같다
-gt 크다
-ne 같지 않다
num1 -a num2 num1과  num2를 and한다. 즉, 모두 참이여만 참
num1 -o num2 num1과  num2를 or한다. 즉, 둘 중 하나만 참이여만 참

2) 문자열 비교 연산자 

연산자 설명 Example
str1=str2 문자열이 서로 일치
if [ $value = landau ]; then
    echo "$value"
fi
str1 != str2 • 두 문자열이 일치하지 않음   
-n str • str이 NULL이 아님
• 문자열의 길이가 0보다 큼 
 
-z str • str이 NULL이다
• 문자열의 길이가 0이다. 

 
str1 \< str2 str1이 str2보다 작은 지 검사
• 주의: 부등호 기호 앞에 이스케이프 문자를 같이 써야 함
value1=baseball
value2=hockey
if [ $value1 \> $value2 ]; then
    echo "$value1 is greater then $value2"
else 
    echo "$value2 is greater than $value1"
fi
str1 \> str2 • str1이 str2보다 큰지를 검사 
• if문의 비교문에서는 대문자가 소문자보다 작은 것으로 인식

3) 파일 속성 연산자 

연산자 설명
 -b file 파일이 블록디바이스면 참
-c file 파일이 문자 디바이스면 참
-d file  파일이 존재하고 디렉토리인 경우
- 디렉토리인 경우에만 사용
-e file 파일이 존재하는 경우 사용 
- 파일 또는 디렉토리가 존재하는지 여부를 파악할 때 사용
-f file  파일이 존재하고 정규파일인 경우 
- 디렉토리가 아닌 파일만을 판단할 때에는 해당 옵션을 사용
-r file File이 존재하고 읽기 권한이 있는 경우
-s file  File이 존재하고 비어있지 않는 경우
-w file  파일에 쓰기 권한이 있는 경우
-x file file에 실행 권한이 있는 경우
-O file File의 소유자인 경우
-G file File의 Group UID와 현재 사용자의 그룹과 일치하는 경우
file1 -nt file2 File1이 File2보다 나중에 작성한 경우 (변경시간 기준) 
file1 -ot file2 File1이 File2보다 이전에 작성한 경우 (변경시간 기준) 

 

 


1. For 문 

쉘 스크립트에서 For 구문의 형식은 python의 for 구문과 비슷하며, 일반적으로 아래의 세 경우처럼 쓸 수 있다. 

1) 방식 1 

for <name of a variable> in <variable1> <variable2> <variable3> <variable4> ... 
do
	<commands>
done

NOTE: Shell script에서 for를 쓸 때에는 반드시 "do"와 "done"을 같이 써야한다. 
NOTE: in 뒤의 변수들이 만약 문자열들의 리스트일 경우, 문자열이 빈칸을 포함하고 있다면 반드시 해당 문자열을 ""로 감싸줘야한다. 그렇지 않으면, For 구문은 빈칸으로 나누어진 데이터 값을 개별적인 데이터로 인식한다. 

2) 방식 2

for <variables> in <list>
do
	<commands>
done

 

3) 방식 3: C 스타일의 for 구문 
  
 • syntax: for (( variables ; condition ; iteration process )) 
      - "(("와 "))" 변수사이에 빈 칸을 포함시켜야 한다. 
      - 조건문앞에 있는 변수 앞에 달러($)기호를 붙이지 않는다. 
      - 반복 프로세스의 수식에 expr 명령 형식이 사용되지 않는다. 
   • 예시 

#! /bin/bash
for (( i=1; i <= 10; i++ )); do
	echo $i
done 


a. for 명령어 예시: 방식 1의 예

$ vim for_example_1.sh
#! /bin/bash
for fruit in apple banana coconut orange watermaleon
do
	echo "$fruit" 
done

$ source for_example_1.sh 
apple 
banana 
coconut 
orange 
watermaleon

 

b. for 명령어 예시: 방식 1의 예

 


While/until 문

1. while/until 문 

  - 조건이 거짓/참이 될 때까지 문장을 실행 
  - while: condition에 있는 조건 또는 명령문이 0이 아닌 상태로 종료가 되었을 때, 명령문들의 반복 (루프)를 종료 
  - until: condition에 있는 조건 또는 명령문이 0인 상태로 종료가 되었을 때, 명령문들의 반복 (루프)를 종료 

  1) while/until의 syntax 

# while 문 
while [ condition ]
do
	<commmands>
done

# until 문
until [ condition ]
do 
	<commands>
done

 - while의 조건문은 if-then의 조건문과 완전히 동일한 형식 
    (1) bash 명령문 및 조건문 테스트 가능 
    (2) 조건문의 가장 일반적인 사용법: 루프 명령들이 사용하는 쉘 변수의 값을 검사하기 위해 대괄호를 사용 
    (3) 여러 개의 테스트 구문이 있는 경우에는 각 테스트 구문은 별개의 줄에 있어야 함 

  2) Example 

#! /bin/bash

while [ $var - gt 0 ]; do
    echo $var
    var=$[ $var - 1 ]
done

# 여러 개의 테스트 구문이 있는 경우에는 각 테스트 구문은 별개의 줄에 있어야 함 
#!/bin/bash
while  echo $var 
      [ $var -ge 0 ]
do
     echo “This is the inner loop”
     var=$[ $var – 1 ]
done

 

728x90

댓글