- IF
#!/bin/bash
if [ 조건 ]; then
참이면 이곳의 명령을 실행
elif [ 조건 ]; then
if가 거짓일때 elif가 참이면 이곳을 실행
else
둘다 아닐 때 이곳을 실행
fi
#!/bin/bash
# if.sh
a=10
b=20
if [ $a == $b ]; then
echo "a는 b랑 같다"
elif [ $a -gt $b ]; then
echo "a가 b보다 커요"
elif [ $a -lt $b ]; then
echo "a가 b보다 자가용"
else
echo "아무 조건에도 해당이 안되네여"
fi
$ ./if.sh
a가 b보다 자가용
쉘 스크립트에선 if가 끝나면 fi로 닫아(?)주어야 한다.
else if 대신 쉘 스크립트에선 elif 라고 쓴다.
if [ $a == $b ]; then
if [$a == $b ]; then
띄어쓰기 하나 차이로 잘못되기 때문에 유의 해야한다.
if가 참일때 실행될
echo "a는 b랑 같다"
같은 경우는 제일 앞의 여백이 몇 칸이던 딱히 상관이 없는듯 하다.
- CASE
case는 기준 문자열 에서 특정 문자열을 찾아 일치하면 그 안에 있는 명령을 실행한다.
#!/bin/bash
case [기준문자열] in
[문자열1])
[명령1]
;;
[문자열2])
[명령2]
;;
[문자열3]|[문자열4])
[명령3]
;;
*)
[명령4]
esac
case가 끝나면 esac 으로 닫아준다 (아니면 오류남)
;; 는 다른 언어에서 break와 같은 역할을 한다
브레이크가 없다고 해서 다음 문자열로 넘어가는게 아니라 그냥 오류가 난다.
필요에 따라 [문자열3]|[문자열4]) 처럼 사이에 | 를 붙여 [문자열3] 또는 [문자열4]에 해당하면,... 과 같이 OR조건을 줄 수도 있다.
*) 같은 경우는 와일드 카드 라고 한다.
위처럼 사용할 경우 [문자열1]~[문자열4]까지 아무것도 해당하지 않을 때 *에 일치하는것이 되어 [명령4]가 실행된다.
*) 가 없을 경우라면 [문자열1]~[문자열4]까지 아무것도 해당하지 않을 때 그냥 case문을 빠져나간다.
- 와일드 카드
* : 없는것을 포함한 문자의 개수에 제한없이 일치하는것으로 간주
? : ? 의 개수만큼 문자수가 일치하는것으로 간주
a[bcd] : ab, ac, ad 처럼 대괄호 [ ] 안에 있는 문자들중 하나라도 일치하면 된다.
이 외에도 더 다양한 와일드 카드가 있다고 한다.
#!/bin/bash
# case.sh
FRUIT="kiwi"
case "$FRUIT" in
"apple")
echo "사과는 맛있어"
;;
"banana")
echo "맛있으면 바나나"
;;
"kiwi")
echo "키위는 뉴질랜드"
;;
esac
$ ./case.sh
키위는 뉴질랜드
기준문자열과 찾을 문자열에 변수나 전달인자를 활용할 수도 있다
#!/bin/bash
# case2.sh
option="${1}"
case "${option}" in
f)
FILE="${2}"
echo "파일명은 $FILE임"
;;
d)
DIR="${2}"
echo "디렉토리명은 $DIR임"
;;
*)
echo "파일/디렉토리명은 $(basename ${0})"
;;
esac
$ ./case2.sh f 김치
파일명은 김치임
$ ./case2.sh d 참치
디렉토리명은 참치임
$ ./case2.sh t 꽁치
파일/디렉토리명은 case2.sh
'리눅스 (Linux)' 카테고리의 다른 글
While (0) | 2021.12.21 |
---|---|
쉘 스크립트로 오늘 날짜 정보가 입력된 파일 생성하기 (0) | 2021.12.21 |
비교 연산자 (0) | 2021.12.21 |
연월 입력받아 달력 출력하기 (0) | 2021.12.21 |
배열 (0) | 2021.12.20 |
댓글