Shell Script 분기문/반복문 처리

식빵·2022년 3월 12일
0

Shell Script

목록 보기
5/5
post-thumbnail

🍀 Case 분기문


📌 기능 및 문법

  1. 단순하 int, character 값 비교 가능
  2. *(와일드카드)를 포함하는 string 비교도 가능
  3. 문법
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 반복문

📌 기본 문법

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 반복문

📌 기본 문법

- 기본 형태

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 이 없다면 사용자가 계속해서 입력을 받는 방식으로 동작한다.




✨ 좀 더 알아보기

profile
백엔드를 계속 배우고 있는 개발자입니다 😊

0개의 댓글