Unix / Linux - 특별 변수들

안녕하세요, 열정적인 프로그래머 지망생 여러분! Unix와 Linux 특별 변수们的 세계로 흥미로운 여정을 안내해 드리게 되어 매우 기쁩니다. 컴퓨터 과학을 오랫동안 가르쳐온 경험을 바탕으로 이 개념들을 마스터하면 여러분의 프로그래밍 여정에서 게임 체인저가 될 것이라 확신합니다. 그럼 시작해 볼까요!

Unix / Linux - Special Variables

특별 변수들에 대한 소개

이제 구체적인 내용에 들어가기 전에 특별 변수들이 무엇인지 이해해 보겠습니다. 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