쉘스크립트의 특수 내장 변수인 매개변수에 해당하는 정의와 쉘스크립트 파라미터 전달하기 위한 규칙과 활용 예제를 살펴보고 직접 실습해보며 매개변수에 대한 이해를 돕는 내용입니다. 인수 전달이 되는 과정과 파라미터의 의미정도를 외우고 내 것으로 만든다면 쉘스크립트 매개변수에 대한 내용은 쉽게 응용하거나 실무에 잘 이용할 수 있습니다.
※ 목차 구성
1) 쉘스크립트 매개변수란?
2) 쉘스크립트 인수 전달 규칙
3) 쉘스크립트 매개변수 예제
4) 쉘스크립트 매개변수 활용
쉘스크립트 매개변수란?
매개변수
리눅스에서 사용하는 쉘스크립트는 사용자가 직접 작성하여 짜인 실행 프로그램파일입니다. 실행권한이 있어야 실행되는 .sh 확장자의 쉘스크립트는 특수 내장 변수로서 특수변수라고 불리는 매개변수를 이용할 수 있으며 positional parameter를 제공합니다.
위 사진과 같이 test_script 실행파일과 함께 숫자가 붙은 것을 모두 파라미터라고 합니다. 각 파라미터에는 의미와 역할이 있습니다. 즉, 특수 내장 변수인 매개변수는 쉘 스크립트를 수행할 때 사용자가 전달하는 변수나 함수의 인수를 전달하는 데 사용됩니다.
쉘스크립트 인수 전달 규칙
쉘스크립트 매개변수 선언의 기준은 공백(띄어쓰기)을 기준으로 파라미터를 구분하게 되며 각 파라미터는 원하는 만큼 그 수를 정하여 나열할 수 있습니다.
쉘스크립트 파라미터 의미
쉘스크립트 파라미터 | 파라미터 의미 |
$0 | 쉘스크립트 이름 |
$1 | 쉘스크립트 실행 시 사용한 첫번째 인자 |
$2 | 쉘스크립트 실행 시 사용한 두번째 인자 |
$3 | 쉘스크립트 실행 시 사용한 세번째 인자 |
$* | 쉘스크립트 실행 시 사용한 전체 인자 값 |
$@ | 쉘 스크립트 실행시 사용한 전체 인자 값 |
$# | 쉘스크립트 실행 시 사용한 매개변수 총 개수 |
$$ | 현재 실행한 스크립트 프로세스 아이디(PID) |
$? | 마지막으로 실행되었던 종료 인자(0이면 정상 종료) |
$! | 이전에 실행한 명령의 프로세스 아이디(PID) |
실행할 쉘스크립트 내 파라미터를 호출하는 내용이 없다면 쉘스크립트 실행 시 인자값을 주어도 실행되지 않으며 파라미터는 공백(띄어쓰기포함)으로 구분됩니다. 아래 예시는 똑같은 쉘스크립트 매개변수를 선언하였지만 test_script.sh 파일 내 매개변수 내용이 없는 경우와 있는 경우를 나타낸 예시입니다.
root@server # cat test_script.sh
#!/bin/bash
echo "Hello"
root@server # ./test_script.sh my name is kim
Hello
-----------------------------------------------
root@server # cat test_script.sh
#!/bin/bash
echo "Hello $1 $2 $3 $4"
root@server # ./test_script.sh my name is
Hello my name is kim
쉘스크립트 매개변수 예제
쉘스크립트 매개변수에 대한 내용을 쉽게 이해하기 위해 실습을 진행하는 내용입니다. 직접 실행파일을 만들어 쉘스크립트 내용을 아래 예제와 똑같이 작성하고 파라미터를 사용자 임의대로 선언하여 실습해보는 것이 쉘스크립트 매개변수의 이해하기 수월해집니다.
script.sh 파일 만들기
root@server # touch script.sh
script.sh 실행 권한 부여하기
root@server # chmod 755 script.sh
vim편집기를 이용하여 내용 작성하기
root@server # vim script
root@server cat script.sh
echo "argument1: $1"
echo "argument2: $2"
echo "argument3: $3"
echo "This file name: $0"
echo "Total argument number: $#"
echo "This file PID: $$"
echo "Total argument: $*"
▼매개변수를 직접 입력하여 실행하기
root@server # ./script.sh red blue yellow
argument1: red
argument2: blue
argument3: yellow
This file name: ./script.sh
Total argument number: 3
This file PID: 196511
Total argument: red blue yellow
쉘스크립트 매개변수 활용
쉘스크립트를 작성하여 사용하면서 매개변수를 응용할 일은 많지만 일반적으로 현업에서 사용할 때는 서비스를 시작, 중지, 상태를 보는 쉘스크립트를 많이 사용하거나 특정 사용자가 실행해야 되는 서비스들이 존재합니다.
아래예시는 쉘스크립트 실행파일인 $0을 제외하고 반드시 1개의 파라미터를 사용해야 되는데 실수로 파라미터를 선언하지 않거나 2개의 파라미터를 선언하였을 때 실행프로그램 종료 인자가 '1'을 반환하며 종료하는 쉘스크립트 예시입니다.
root@server # cat script.sh
#!/bin/bash
if [ $# -ne 1 ]; then
echo "argument error"
exit 1
if
echo "Hello"
root@server # ./script.sh
argument error
root@server # ./script.sh a
Hello
root@server # ./script.sh a a
argument error
아래 예시는 위 예시를 포함하여 첫 번째 파라미터값이 특정 문자가 아닐 경우 쉘스크립트를 종료인자 1을 반환하여 종료하게 하는 쉘스크립트 예시입니다. 이 예시는 특정 파라미터값을 오타 없이 정확히 입력해야 될 때 유용하게 사용됩니다.
쉘 스크립트 동작 방식은 첫 번째 쉘스크립트 파라미터 값을 입력하였을 때 case문을 활용하여 start, stop, status이면 원하는 명령을 실행하고 start, stop, status가 아닐 경우 에러메시지와 함께 종료인자 1을 반환하여 쉘스크립트를 종료합니다.
root@server # cat script.sh
#!/bin/bash
if [ $# -ne 1 ]; then
echo "argument error"
exit 1
if
case $1 in
start) echo "start";;
stop) echo "stop";;
status) echo "status";;
*) echo "argument error"
exit 1;;
esac
root@server # ./script.sh
argument error
root@server # ./script.sh a
argument error
root@server # ./script.sh a a
argument error
root@server # ./script.sh stary
argument error
root@server # ./script.sh start
start
root@server # ./script.sh status
status
예시에 사용된 if문 사용법 및 예제와 case문 사용법 및 예제에 대한 추가 내용은 아래 포스팅을 참고해 주세요
'IT > 리눅스 쉘 스크립트' 카테고리의 다른 글
리눅스 쉘스크립트 변수 확장 이해 - Linux shell parameter expansion (9) | 2023.01.11 |
---|---|
리눅스 배열 선언 응용 사용법 - ls 배열, 쉘스크립트 배열, for문 배열 (9) | 2023.01.07 |
[shell script] 리눅스 read 명령어 사용자로부터 변수 값 입력 받기 (6) | 2022.10.05 |
[shell script] 쉘 스크립트 기초 #10 - 제어문 until문 설명 및 예제 (62) | 2022.08.07 |
[shell script] 쉘 스크립트 기초 #9 - 제어문 while문 설명 및 예제 (45) | 2022.07.16 |
댓글