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
'프로그래밍 언어 > Shell script(BASH)' 카테고리의 다른 글
[Shell Script] 함수 만들기 (0) | 2021.06.08 |
---|---|
[Shell script] 여러 개의 사용자 계정 만들기 (0) | 2021.06.03 |
[Shellscript] 정수 및 실수 연산 (0) | 2021.04.20 |
[Shellscript] 쉘, 쉘 스크립트 및 쉘 변수 (BASH) (0) | 2021.04.20 |
[Bash/Shell script] 디렉토리 리스트 출력 (0) | 2021.02.05 |
댓글