[Linux] Shell Script - 다중 if 문 / case 문 / 파일 연산자 [ elif/ case]
Nowhere 와 Now here 의 차이

IT/ㄴ Linux Shall Script

[Linux] Shell Script - 다중 if 문 / case 문 / 파일 연산자 [ elif/ case]

TIENE 2023. 7. 21. 15:43
반응형

다중 if 문

- if 문을 다중으로 사용하는 문구다.

- elif를 사용하여 if 문을 다중으로 사용가능하다. 

 

 

- 평균이 90 점이상이면 A학점, 80점 이상이면 B학점 70 점이상이면 C학점 그 미만은 F학점을 출력하기

#!/bin/sh
echo "이름 :" ; read name
echo "국어 :" ; read kor
echo "영어 :" ; read eng

avg=`expr \( $kor + $eng \) / 2`

if [ $avg -ge  90 ]
        then
                grade="A"
        elif [ $avg -ge 80 ]
        then
                grade="B"
        elif [ $avg -ge 70 ]
        then
                grade="C"
        else
                grade="F"
fi

echo "이름 : $name"
echo "평균 : $avg"
echo "성적등급 : $grade 학점"

exit 0


case문

- if문은 참과 거짓의 두 경우만 사용할 수 있다.(이를 2중 분기라고도 한다.)

- 그런데 여러 가지 경우의 수가 있다면 if 문을 중복해서 사용해야 하므로 복잡한 구문이 될 수 있다.

 

- 이때 사용하는 것이 case 문이다.(다중 분기라고도 한다.)

- if 로 시작하고, fi로 닫는 것처럼, case로 시작하여 esac로 닫는다.

- case문은 /etc/init.d/디렉토리의 서버 데몬 실행 스크립트에서 많이 사용된다.

 

 

- 입력한 값이 start면 start / stop이면 stop / restart면 restart를 출력하고 그 이외의 입력값은 Exit를 출력하기

#! /bin/bash
echo " start / stop /restart :"
read st
case "$st" in
        start)
                echo "start" ;;
        stop)
                echo "stop" ;;
        restart)
                echo "restart" ;;
        *)
                echo "Exit" ;;
esac
exit 0

 

- 입력한 값이  yes | Y | Yes | YES 중 하나면 입력한 문구를 출력하고, 소문자 n이나 대문자 N으로 시작하는 모든 단어가 입력되면 입력한 문구를 출력하고, 그 이외의 입력값은입력한 문구을 출력하기

#! /bin/bash
echo "Is it fun?"
read answer
case $answer in
        yes | Y | Yes | YES)
        echo "What a relief"   실행할 문장이  있으므로 끝에 [;;]  붙이지 않는다
        echo "Work Harder";; 실행할 문장이 끝났으므로 뒤에 [;;]를 붙인다.
      
        [nN]*)                            [nN]* 는 n 또는 N가 들어가는 모든 단어를 수용한다는 의미다.
        echo "what a shame";;
        *)
        echo "Fuxk Off"
        exit 1;;                        정상적인 종료가 아니므로 exit 1로 종료 했다.
esac
exit 0

 

 

- 숫자 1을 입력하면 계정을 생성하는 과정이 나온다. 계정을 생성하고 홈디렉토리를 보여준다.

- 숫자 2를 입력하면 계정을 삭제하는 과정이 나온다. 계정을 삭제하고 홈디렉토리를 보여준다.

- 그 이외의 입력값은 입력한 문구를 출력한다.

#!/bin/sh
echo "1. 계정생성 2. 계정삭제 :"
read num
case "$num" in
        1)
                echo "계정이름 :"
                read user1
                useradd $user1
                echo "$user1 사용자 생성"
                ls /home ;;
        2)
                echo "계정삭제:"
                read user1
                userdel -r $user1
                echo "$user1 사용자 삭제"
                ls /home ;;
        *)
                echo "다시 입력:";;
esac
exit 0

 

 

- if 문과 case 문을 종합하여 성적 계산과 USER 확인 그리고 종료라는 경우의 수를 만든다.

- 성적 계산은 이름과 각 과목별 점수가 나오며, 3 과목의 평균이 60이상이면 합격이라는 문구를 출력한다.

- USER 확인은 ID가 admin 이고 PW가 1111이면 Login 이라는 문구를 출력한다.

- 종료는 종료합니다라는 문구를 출력한다.

#! /bin/bash
echo "1.성적 계산 2. USER 확인 3. 종료 :"
read num
case "$num" in
        1)
        echo "## 성적 계산 ## "
        echo "이름 : " ; read name
        echo "국어 : " ; read kor
        echo "수학 : " ; read mat
        echo "영어 : " ; read eng
        avg=`expr \( $kor + $mat + $eng \) / 3 `
        if [ "$avg" -gt 60 ]
        then
                echo "합격"
        else
                echo "불합격"
        fi;;

        2)
        echo "ID :" ; read id
        echo "PW :" ; read pw
        if [ $id = admin ] && [ $pw = 1111 ]
        then
                echo "Login"
        else
                echo "Exit"
        fi;;

        *)
        echo "종료합니다";;

esac
exit 0


 

파일과 관련된 조건

- if문에서 파일을 처리하기 위한 조건

옵션 설명
-d [파일명]  파일이 디렉토리면 참
-e [파일명]  파일이 존재하면 참
-f [파일명]  파일이 일반 파일이면 참
-g [파일명]   파일이 set-group-id가 설정되면 참
-r [파일명]  파일이 읽기 가능이면 참
-s [파일명]  파일크기가 0이 아니면 참
-u [파일명]  파일이 set-user-id가 설정되면 참
-w [파일명] 파일쓰기가 가능하면 참
-x [파일명]  파일실행이 가능하면 참

 

- 입력한 서비스명이 있으면 파일의 5번째 줄까지 출력하고, 없으면 입력한 문구를 출력하기

#!/bin/sh
echo  "서비스명 입력 :"; read f1
fname=/usr/lib/systemd/system/$f1
if [ -f  $fname ]
        then
                head -5 $fname
        else
                echo "$f1 서비스가 설치되지 않았습니다."
fi
exit 0

 

- 사용자 ID와 사용자 PW를 입력한다.

- 사용자 ID가 존재하면 입력한 문구를 출력하고, 없으면 입력한 사용자 ID와 사용자 PW를 바탕으로 사용자를 만들고 계정정보와 홈 디렉토리를 출력하기

#!/bin/sh
echo "사용자 ID:"; read id
echo "사용자 PW:"; read pw
if [ -d /home/$id ]
then
        echo "$id 가존재합니다."
else
        useradd -p `openssl passwd $pw` $id
        echo 사용자 "$id" 의 계정 정보
        tail -1 /etc/shadow
        echo 사용자 "$id" 의 홈디렉토리
        ls -al /home/$id
fi
exit 0


 

반응형