728x90
반응형
쉘스크립트를 사용하다보면, 반복적인 작업이나, 자주 사용되는 작업을 쉘프로그램으로 만들때가 있습니다.
이런 경우 때에 따라 입력을 받아야하는 경우도 있는데요!
제가 쉘스크립트에서 어떻게 사용자의 입력을 받고 처리하는 지에 대해 포스트 하겠습니다.
주로 "case"와 "read"를 조합하여 많이 사용합니다.
01. case 사용법
case는 "특정 경우"에 action 취하게 하는 역할을 합니다.
<문법>
case 문자열 in
경우1) 명령어1;;
경우2) 명령어2;;
...
esac
문자열이 경우1과 같으면 명령어1을 실행하고, 문자열이 경우2와 같으면 명령어2를 실행해!!...
이런 식인겁니다.
쉘스크립트에서 if문과 같이 case문도 끝날때는 case를 거꾸로 "esac"를 작성해야합니다!
01.1. 충족한 경우에 명령어 여러개 실행하기
어떤 경우를 만족하였을때, 여러개의 명령어가 실행되어야 한다!
case 문자열 in
경우1)
명령어
명령어
명령어
...
경우2)
명령어
명령어
명령어
...
* )
명령어
명령어
명령어
...
esac
01.2. case문을 통해 프로그램의 -help 만들기
위를 응용하여 어떤 프로그램의 사용법이나, 설명, 입력변수에 대한 설명 등등을 만들어 볼 수 있습니다.
#!/bin/bash
PROGRAM="$0"
VERSION="0.0.1"
export USERNAME=`logname`
Usage()
{
echo " "
echo "Usage: $0 TEST"
echo " "
echo " --version | -v : Print out version"
echo " --help | -h : Print out this help message"
}
while true
do
case "$1" in
--version | -v)
echo -e "$0 version"
echo -e ${VERSION}
exit 0
;;
--help | -h)
Usage
exit 0
;;
-*)
echo Unrecognized flag : "$1"
Usage
exit 0
;;
*)
break
;;
esac
done
-h를 입력하든, -help를 입력하든 작성된 Usage()를 호출할수 있고, -v, -version을 입력하면 버전에 대한 정보를 반환할 수 있습니다.
02. read 사용법
read는 "사용자 입력"을 받을 수 있는 명령어입니다. 굉장히 유용해요!
<문법>
read 입력변수
<예시>
echo "사용자의 이름은 무엇입니까"
read username
echo "사용자의 이름은 ${username}입니다."
##출력
사용자의 이름은 무엇입니까
panython
사용자의 이름은 panython입니다.
03. case 문과 read 명령어를 이용한 쉘 프로그램 사용 예제
간략하게 두 가자의 사용법을 확인해보았습니다.
저는 이 두 가지를 조합해서 유저에게 어떤 행동에 대하여 의사를 물어볼때 사용합니다.
사용 예제는 아래와 같습니다.
<예제>
#!/bin/bash
read -p "재부팅을 진행하시겠습니까?[y/n] :" yn
case $yn in
[Yy]* ) echo "재부팅을 합니다." && sudo -S reboot;;
[Nn]* ) echo "재부팅을 하지 않습니다.";;
* ) echo "y 나 n로 입력해주십시오.";;
esac
프로그램 설치후, 컴퓨터를 재부팅 해야할때 해당 코드를 사용하는데요!
read를 통해 yn이라는 문자열을 받고 이 문자열이 y인지 n인지에 따라 명령어가 실행 될 수 있도록 합니다!!
여기 나름의 팁은 [Yy], [Nn]과 같이 사용하면, 대소문자에 대해 인식이 가능합니다!
항상 배우고 싶습니다! 많은 피드백 주시면 감사하겠습니다.
728x90
반응형
'OS(운영체제) > Linux' 카테고리의 다른 글
[Linux] Docker 소프트웨어 배포 및 외부접속 하기 (0) | 2021.12.23 |
---|---|
[Linux] Docker의 Dockerfile 작성하여 Docker image 만들기 (0) | 2021.12.22 |
[Linux] Docker 주로 사용하는 명령어 모음!! (0) | 2021.12.16 |
[Linux] Docker에 대해 알아보자! (0) | 2021.12.13 |
[Linux] CentOS 7 설치 (0) | 2021.02.23 |