본문 바로가기
우아한테크코스 4기/레벨3

[Linux] Shell Script로 자기소개하기

by 나는후니 2022. 7. 11.

이번 포스팅은 Shell Script로 변수를 할당하는 방법을 학습한 뒤 원하는대로 자기소개를 만들어 본 경험을 소개하고자 합니다.

입력한 변수의 개수

Linux shell script 실행 명령을 날릴 때, 변수를 함께 스크립트로 넘길 수 있습니다.

./introduc.sh a b c

위 명령어처럼 공백을 두고 명령문을 실행하면 a, b, c가 script의 변수로 할당됩니다.

변수로 할당된 내용을 사용하는 다양한 명령어가 있는데요, 그 중에서도 변수의 개수변수를 사용하는 방법은 아래와 같습니다.

$#    Stores the number of command-line arguments that 
      were passed to the shell program.

$0    Stores the first word of the entered command (the 
      name of the shell program).

$#은 변수의 개수를 $0은 해당 index의 변수를 가져옵니다.

if [ $# -eq 0 ]; then
    echo "변수를 입력해줘요"
fi

NAME=$1
AGE=$2

echo "이름 : $NAME, 나이 : $AGE"

위와 같은 스크립트가 있을 때 ./introduce.sh huni 26을 입력하면 이름 : huni, 나이 : 26이 출력됩니다.

하지만 명령어 자체가 조금 불친절해보입니다.

whilecase를 이용하여 조금 더 깔끔하게 변경해보겠습니다.

while, case

if [ $# -eq 0 ]; then
        echo "자기 소개 내용을 입력해주세요"
        exit 1
fi

NAME=""
AGE=""
ORGANIZATION=""
PART=""

while (($#)); do # 1
        case "$1" in # 2
                -n|--name)
                        if [ -n "$2" ]; then # -n : 변수가 존재하면
                                NAME=$2
                                shift 2 # 3
                        fi
                        ;;
                -a|--age)
                        if [ -n "$2" ]; then
                                AGE=$2
                                shift 2
                        fi
                        ;;
                -o|--organization)
                        if [ -n "$2" ]; then
                                ORGANIZATION=$2
                                shift 2
                        fi
                        ;;
                -p|--part)
                        if [ -n "$2" ]; then
                                PART=$2
                                shift 2
                        fi
                        ;;
                -h|--help)
                        if [ $# -eq 1 ]; then
                                echo "help argument command"
                                echo "-n | --name : 이름"
                                echo "-a | --age : 나이"
                                echo "-o | --organization : 조직"
                                echo "-p | --part : 부서"
                                exit 0 # 4
                        else
                                echo "-h | --help 명령어만 입력하세요"
                                exit 1 # 4
                        fi
                        ;;

        esac
done
  1. (1) while (($#)); do done은 남아있는 커맨드 인자가 하나라도 존재하면 반복문을 계속 진행합니다. 따라서 (3) shift와 함께 사용해야하는데요. shift는 입력한 숫자만큼 현재 위치에서 뒤로 이동합니다. 따라서 #1에서 #3으로 이동하고 싶다면 shift 2를 입력하면 되겠죠.
  2. (2) case $1 in ~~) ;; esac 는 java의 switch case와 같은 개념입니다. $1 변수가 in 이후에 나오는 내용과 같다면 내부 명령문을 실행시켜 줄 수 있는 것이죠.
  3. (4) exit은 shell 명령을 종료합니다. 다만 exit 뒤의 0과 1~255 는 각각 정상종료, 오류종료를 의미합니다. 종료되더라도 오류상황이 아니라면 exit 0을 사용하고, 에러 상황이라면 exit 1~255을 사용합니다. 명령어 실행 후 종료된다면, echo $?와 같이 종료 코드를 확인해볼 수 있습니다.

위 script는 변수를 shift 해가면서 1번변수에서 어떤 변수에 값을 할당할지 결정하고 2번 변수를 이용해 변수에 값을 할당해주는 과정을 거칩니다.

마무리

if [ -z $NAME ]; then
        echo "이름을 입력해주세요."
        exit 1
fi

if [ -z $AGE ]; then
        echo "나이를 입력해주세요."
        exit 1
fi
if [ -z $ORGANIZATION ]; then
        echo "조직을 입력해주세요."
        exit 1
fi
if [ -z $PART ]; then
        echo "부문을 입력해주세요."
        exit 1
fi

echo "이제부터 자기소개 시작"
echo "이름 : $NAME"
echo "나이 : $AGE"
echo "조직 : $ORGANIZATION"
echo "부문 : $PART"

가장 하단에 모든 값이 다 존재하는지 -z 명령어를 통해 확인하고 출력하고자 하는 내용을 출력해줍니다.

./introduce.sh -n huni -a 26 -o wooteco -p BE 내용을 입력하면 아래와 같이 자기소개가 출력됩니다.

이제부터 자기소개 시작
이름 : huni
나이 : 26
조직 : wooteco
부문 : BE