다중 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
'IT > ㄴ Linux Shall Script' 카테고리의 다른 글
[Linux] Shell Script - 반복문 [ while / for ] (0) | 2023.07.24 |
---|---|
[Linux] Shell Script - if 문 기초 [if / else / 비교 연산자] (0) | 2023.07.20 |
[Linux] Shell Script 기초 [echo] (0) | 2023.07.20 |