*(와일드카드)
를 포함하는 string 비교도 가능case expression in
pattern1)
statements ;;
pattern2)
statements ;;
...
esac
예제 1
#!/bin/bash
read -p "Enter y[es] or n[o]: " ans
## read로 입력 그리고 heredoc로 메세지 출력을 둘로 나눌 수 있다.
# cat << EOF
# Enter y[es] or n[o] :
# EOF
#
# read ans
case ${ans} in
[yY]|'yes')
echo "YESSSSSS!"
;;
[nN]|'no')
echo "NOOOOOO!"
;;
*)
echo "...?"
;;
esac
예제 2
#!/bin/bash
printf "%10s %-10s\n" "1." 'ls 명령어 수행'
printf "%10s %-10s\n" "2." 'ls -al 명령어 수행'
echo
read -n1 -p "원하는 작업 번호를 입력하세요: " proc
case $proc in
1)
echo
ls
;;
2)
echo
ls -al
;;
esac
for i in {반복방식 지정}
do
statement...
done
# continue, break 도 된다!
1. 횟수를 지정한 반복
#!/bin/bash
## 방법1
for i in {1..10}
do
echo $i
done
## 방법2
for ((i=11; i<=20; i++))
do
echo $i
done
2. 결과값에 의한 반복
#!/bin/bash
### 단순 변수에 의한 반복
list=(1 2 3 4 5)
for var in ${list[*]}
do
echo $var
done
### 명령 치환에 의한 반복
for var in $(ls /home/dailycode/lab)
do
echo var
done
### wildcard를 사용한 반복문
for str in *.sh
do
echo $str
done
### wildcard를 사용한 반복분 - 디렉토리 목록 출력하기
if [ $PWD = '/' ]; then
for dir in $(echo /*); do
[ -d $dir ] || continue
dir_list+="$dir "
done
else
for dir in $PWD/*; do
[ -d $dir ] || continue
dir_list+="$dir "
done
fi
for list in $dir_list; do
echo $list
done
### IFS 를 변경하여 PATH에 있는 정보를 한줄, 한줄 출력
list=$(echo $PATH)
IFS=:
for var in $list
do
echo "$var"
done
echo ""
- 기본 형태
while [조건문]
do
statement...
done
- File line read 형태
while read line
do
statement
done < file
[조건문]
에는 단순한 true/false 로 나눠떠렁지는 것만 들어가는 게 아니다.
파일을 읽는 것을 [조건문]
에 넣을 수도 있다. 아래 예시에서 살펴보자.
예시1: 가장 기본형태
#!/bin/bash
INDEX=1
while [ $INDEX -lt 10 ]
do
echo "loop - $INDEX"
((INDEX++))
done
예시2: 정말로 ~~하시겠습니까?
while [ "$isY" != "y" ]
do
read -p "닉네임을 설정해주세요: " nickname
read -p "닉네임을 ${nickname}로 지정하겠습니까?(y/n) " isY
done
예시3: 파일 read line 방식
#!/bin/bash
echo $PATH > file
IFS=:
while read line
do
printf "%s\n" $line
done < file
참고로 맨 끝에 done < file
이 없다면 사용자가 계속해서 입력을 받는 방식으로 동작한다.
IFS
를 통한 반복문 사용해보기: