소개
쉘 프로그래밍에서 스크립트에 인자를 전달하는 기능은 매우 기본적이면서도 강력한 기능입니다. 이를 통해 스크립트는 명령줄에서 입력을 받아 더욱 유연하고 재사용 가능해집니다. 이 랩에서는 명령줄 인자를 받아 사용할 수 있는 쉘 스크립트를 만드는 과정을 안내합니다. 스크립트 내에서 이러한 인자에 접근하는 방법, 여러 인자를 처리하는 방법, 그리고 특수 변수를 사용하여 효율적으로 처리하는 방법을 배우게 됩니다.
쉘 프로그래밍에서 스크립트에 인자를 전달하는 기능은 매우 기본적이면서도 강력한 기능입니다. 이를 통해 스크립트는 명령줄에서 입력을 받아 더욱 유연하고 재사용 가능해집니다. 이 랩에서는 명령줄 인자를 받아 사용할 수 있는 쉘 스크립트를 만드는 과정을 안내합니다. 스크립트 내에서 이러한 인자에 접근하는 방법, 여러 인자를 처리하는 방법, 그리고 특수 변수를 사용하여 효율적으로 처리하는 방법을 배우게 됩니다.
먼저 새로운 스크립트 파일을 만드는 것부터 시작해 보겠습니다. 이번 실습에서는 WebIDE(VS Code) 를 사용합니다.
/home/labex/project 디렉토리로 이동합니다.arguments.sh로 지정합니다.파일을 생성했으니, 이제 스크립트의 기본 구조를 추가해 보겠습니다.
#!/bin/bash
## Your code will go here
첫 번째 줄은 "쉬뱅 (shebang)" 또는 "해시뱅 (hashbang)"이라고 불립니다. 이는 시스템에 이 스크립트를 실행할 때 어떤 해석기 (interpreter) 를 사용할지 알려주는 역할을 합니다. 여기서는 bash 를 사용합니다.
초보자를 위한 팁: 쉬뱅 라인은 매우 중요합니다. 이 라인이 있으면 매번 bash arguments.sh라고 입력할 필요 없이 ./arguments.sh와 같이 스크립트를 직접 실행할 수 있기 때문입니다. 작은 디테일이지만 스크립트 사용을 훨씬 편리하게 만들어 줍니다.
이제 전달된 인자에 접근하여 화면에 출력하도록 스크립트를 수정해 보겠습니다. 쉘 스크립팅에서는 명령줄 인자에 접근하기 위해 다음과 같은 특수 변수를 사용합니다.
$0: 스크립트 파일 자신의 이름$1, $2, $3 등: 각각 첫 번째, 두 번째, 세 번째 인자arguments.sh 파일에 다음 코드를 추가하세요.
#!/bin/bash
echo "Script name: $0"
echo "First argument: $1"
echo "Second argument: $2"
echo "Third argument: $3"
이 스크립트는 스크립트 이름과 전달된 처음 세 개의 인자를 출력합니다.
초보자를 위한 팁:
$ 기호를 사용합니다.$0, $1, $2 등은 인자와 함께 스크립트를 실행할 때 bash 가 자동으로 설정해 주는 특수 변수입니다.$1, $2, $3은 비어 있게 되지만, 스크립트는 오류 없이 실행됩니다.스크립트를 실행하기 전에 실행 가능하도록 권한을 변경해야 합니다. 이는 chmod 명령어를 사용합니다. 터미널에서 프로젝트 디렉토리로 이동하여 다음 명령어를 실행하세요.
cd /home/labex/project
chmod +x arguments.sh
chmod +x 명령어는 파일에 실행 권한을 추가하여 파일이 스크립트로 실행될 수 있게 합니다.
초보자를 위한 팁:
chmod는 "change mode"의 약자로, 파일이나 디렉토리의 권한을 변경할 때 사용합니다.+x 옵션은 실행 (execute) 권한을 추가합니다. bash 가 파일을 스크립트로 실행하려면 이 권한이 반드시 필요합니다.이제 스크립트가 실행 가능해졌으니, 몇 가지 인자를 넣어 실행해 보겠습니다. 터미널에서 다음 명령어를 입력하세요.
./arguments.sh hello world example
다음과 유사한 출력이 나타날 것입니다.
Script name: ./arguments.sh
First argument: hello
Second argument: world
Third argument: example
이 출력은 스크립트가 명령줄 인자에 성공적으로 접근하여 표시했음을 보여줍니다.
초보자를 위한 팁:
./는 bash 에게 현재 디렉토리에서 스크립트를 찾으라고 지시하는 것입니다../arguments.sh "hello world" example과 같이 따옴표를 사용해야 합니다.전달된 인자의 개수에 따라 다르게 동작하도록 스크립트를 수정해 보겠습니다. 전달된 인자의 총 개수를 담고 있는 $# 특수 변수를 사용합니다.
arguments.sh 파일을 다음과 같이 업데이트하세요.
#!/bin/bash
if [ $## -eq 0 ]; then
echo "No arguments provided."
elif [ $## -eq 1 ]; then
echo "One argument provided: $1"
elif [ $## -eq 2 ]; then
echo "Two arguments provided: $1 and $2"
else
echo "More than two arguments provided:"
echo "First argument: $1"
echo "Second argument: $2"
echo "Third argument: $3"
echo "Total number of arguments: $#"
fi
이 스크립트는 조건문을 사용하여 인자 개수에 따라 다른 메시지를 출력합니다.
초보자를 위한 팁:
$#은 스크립트에 전달된 인자의 총 개수를 나타내는 특수 변수입니다.[ $## -eq 0 ]은 인자의 개수가 0 과 같은지 확인하는 조건식입니다.elif는 "else if"의 줄임말로, 여러 조건을 순차적으로 확인할 때 사용합니다.-eq 연산자는 "equal to(~와 같다)"를 의미합니다. 이 외에도 -lt(less than, ~보다 작다), -gt(greater than, ~보다 크다) 등의 연산자가 있습니다.이제 인자 개수를 달리하여 업데이트된 스크립트를 테스트해 보겠습니다.
./arguments.sh
./arguments.sh one
./arguments.sh one two
./arguments.sh one two three four
제공된 인자의 개수에 따라 각기 다른 결과가 출력되는 것을 확인할 수 있습니다.
초보자를 위한 팁:
./arguments.sh) 스크립트의 첫 번째 조건이 실행됩니다.마지막으로, 모든 명령줄 인자를 나타내는 $@ 특수 변수를 사용하여 제공된 모든 인자를 루프 (반복문) 로 처리하도록 수정해 보겠습니다.
arguments.sh 파일을 다음과 같이 업데이트하세요.
#!/bin/bash
echo "Total number of arguments: $#"
echo "All arguments:"
count=1
for arg in "$@"; do
echo "Argument $count: $arg"
count=$((count + 1))
done
이 스크립트는 for 루프를 사용하여 모든 인자를 순회하며 각 인자의 위치와 내용을 출력합니다.
초보자를 위한 팁:
$@는 스크립트에 전달된 모든 인자를 포함하는 특수 변수입니다.for 루프는 목록에 있는 항목들을 하나씩 순서대로 처리할 때 사용합니다. 여기서는 모든 인자를 하나씩 꺼내어 처리합니다.$((count + 1))은 bash 의 산술 확장 기능입니다. count 변수의 값을 1 씩 증가시키는 데 사용됩니다.여러 개의 인자를 넣어 최종 스크립트를 테스트해 보겠습니다.
./arguments.sh apple banana cherry date
다음과 유사한 출력이 나타날 것입니다.
Total number of arguments: 4
All arguments:
Argument 1: apple
Argument 2: banana
Argument 3: cherry
Argument 4: date
이제 스크립트가 인자 개수에 상관없이 모든 인자를 처리하고 표시할 수 있음을 확인할 수 있습니다.
초보자를 위한 팁:
이 랩을 통해 명령줄 인자를 받아 처리할 수 있는 쉘 스크립트를 만드는 방법을 배웠습니다. 학습한 주요 개념은 다음과 같습니다.
$1, $2 등) 를 사용한 개별 인자 접근$# 변수를 활용한 인자 개수 파악$@ 변수를 활용하여 모든 인자를 반복문으로 처리하는 방법이러한 기술은 쉘 스크립팅의 기초이며, 다양한 입력에 적응할 수 있는 강력하고 유연한 스크립트를 만드는 밑거름이 됩니다. 쉘 스크립팅 실력을 쌓아갈수록, 시스템 관리나 자동화 작업에서 명령줄 인자를 처리하는 능력이 얼마나 중요한지 실감하게 될 것입니다.