Unix / Linux - 특별 변수들
안녕하세요, 열정적인 프로그래머 지망생 여러분! Unix와 Linux 특별 변수们的 세계로 흥미로운 여정을 안내해 드리게 되어 매우 기쁩니다. 컴퓨터 과학을 오랫동안 가르쳐온 경험을 바탕으로 이 개념들을 마스터하면 여러분의 프로그래밍 여정에서 게임 체인저가 될 것이라 확신합니다. 그럼 시작해 볼까요!
특별 변수들에 대한 소개
이제 구체적인 내용에 들어가기 전에 특별 변수들이 무엇인지 이해해 보겠습니다. Unix와 Linux에서 특별 변수들은 셸 환경과 현재 프로세스에 대한 특정 정보를 담고 있는 사전 정의된 변수들입니다. 셸 세계의 비밀 요원들처럼, 항상 중요한 정보를 준비하고 있는 것입니다!
명령줄 인수
명령줄 인수는 무엇인가요?
명령줄 인수는 스크립트를 실행할 때 추가로 제공하는 정보입니다. 이는 로봇이 작업을 시작하기 전에 지시를 주는 것과 같습니다.
간단한 예제를 보겠습니다:
#!/bin/bash
echo "Hello, $1!"
이 스크립트를 greet.sh
로 저장하고 ./greet.sh Alice
로 실행하면 다음과 같이 출력됩니다:
Hello, Alice!
여기서 $1
은 첫 번째 명령줄 인수를 나타냅니다.
여러 인수 사용하기
단일 인수에 국한되지 않습니다. 스크립트를 확장해 보겠습니다:
#!/bin/bash
echo "Hello, $1! Welcome to $2."
이제 ./greet.sh Alice Wonderland
로 실행하면 다음과 같이 출력됩니다:
Hello, Alice! Welcome to Wonderland.
여기서 $1
은 "Alice"를 나타내고 $2
는 "Wonderland"를 나타냅니다.
$0 변수
한 가지 더 특별한 변수를 소개할게요: $0
. 이 변수는 스크립트 자신의 이름을 나타냅니다. 스크립트를 수정해 보겠습니다:
#!/bin/bash
echo "This script is called $0"
echo "Hello, $1! Welcome to $2."
./greet.sh Alice Wonderland
을 실행하면 다음과 같이 출력됩니다:
This script is called ./greet.sh
Hello, Alice! Welcome to Wonderland.
특별 매개변수 $*과 $@
이제 두 가지 매우 유용한 특별 매개변수 $*
과 $@
에 대해 이야기해 보겠습니다. 이들은 명령줄 인수의 다이나믹 듀오입니다!
$* 매개변수
$*
매개변수는 모든 명령줄 인수를 단일 문자열로 나타냅니다. 모든 인수를 한 바구니에 담는 것과 같습니다. 예제를 보겠습니다:
#!/bin/bash
echo "All arguments using \$*: $*"
이 스크립트를 ./args.sh apple banana cherry
로 실행하면 다음과 같이 출력됩니다:
All arguments using $*: apple banana cherry
$@ 매개변수
$@
매개변수는 각 인수를 별도의 엔티티로 취급합니다. 각 인수를 작은 상자에 담는 것과 같습니다. 이제 이를 실제로 보겠습니다:
#!/bin/bash
echo "All arguments using \$@:"
for arg in "$@"
do
echo $arg
done
이를 ./args.sh apple banana cherry
로 실행하면 다음과 같이 출력됩니다:
All arguments using $@:
apple
banana
cherry
$*과 $@의 차이
"이 둘은 나에게는 같아 보이네!"라고 생각할 수도 있습니다. 그러나 이들을 더블 따옴표 안에서 사용할 때 차이가 명확해집니다. 이를 보여주는 스크립트를 만들어 보겠습니다:
#!/bin/bash
echo "Using \$*:"
for arg in "$*"
do
echo $arg
done
echo "Using \$@:"
for arg in "$@"
do
echo $arg
done
이를 ./difference.sh "Hello World" OpenAI ChatGPT
로 실행하면 다음과 같이 출력됩니다:
Using $*:
Hello World OpenAI ChatGPT
Using $@:
Hello World
OpenAI
ChatGPT
차이를 보셨나요? "$*"
는 모든 인수를 단일 문자열로 취급하지만, "$@"
는 각 인수를 별도로 유지합니다.
종료 상태
마지막으로 종료 상태에 대해 이야기해 보겠습니다. Unix와 Linux에서는 모든 명령이 실행이 완료되면 종료 상태를 반환합니다. 이 상태는 0에서 255 사이의 숫자로, 0은 일반적으로 성공을 의미하며, 다른 숫자는 오류를 나타냅니다.
$? 변수
마지막으로 실행된 명령의 종료 상태는 $?
변수에 저장됩니다. 이를 실제로 보겠습니다:
#!/bin/bash
ls /nonexistent_directory
echo "Exit status of ls command: $?"
echo "Hello, World!"
echo "Exit status of echo command: $?"
이 스크립트를 실행하면 다음과 같이 출력될 수 있습니다:
ls: cannot access '/nonexistent_directory': No such file or directory
Exit status of ls command: 2
Hello, World!
Exit status of echo command: 0
ls
명령은 실패했습니다(종료 상태 2), 반면에 echo
명령은 성공했습니다(종료 상태 0).
스크립트에서 종료 상태 사용하기
종료 상태를 스크립트에서 결정에 사용할 수 있습니다. 예제를 보겠습니다:
#!/bin/bash
ping -c 1 google.com > /dev/null
if [ $? -eq 0 ]
then
echo "Internet is working!"
else
echo "Internet is not working!"
fi
이 스크립트는 Google을 한 번 ping하고 종료 상태를 확인합니다. 종료 상태가 0(성공)이면 인터넷이 작동하고 있으며, 그렇지 않으면 인터넷이 작동하지 않는다고 출력합니다.
결론
축하합니다! 여러분은 Unix/Linux 프로그래밍 여정에서 큰 걸음을 뗐습니다. 이 특별 변수들은 작아 보일 수 있지만, 여러분의 프로그래밍 도구箱에서 매우 강력한 도구입니다. 연습이 완벽을 만든다는 것을 기억하고, 이 개념들을 자신의 스크립트에서 실험해 보세요.
이번에 다룬 특별 변수들의 빠른 참조 표를 아래에 제공합니다:
변수 | 설명 |
---|---|
$0 | 스크립트의 이름 |
$1, $2, ... | 명령줄 인수 |
$* | 모든 인수를 단일 문자열로 |
$@ | 모든 인수를 별도의 문자열로 |
$? | 마지막 명령의 종료 상태 |
계속 코딩하고, 배우고, 가장 중요한 것은 즐겁게 하세요! 다음에 다시 만날 때까지 행복한 스크립팅 되세요!
Credits: Image by storyset