셸 스크립팅 · 5 min read · Nov 14, 2025
셸 스크립팅 2부: 입력 받기 및 셸 산술 수행
안녕하세요! 이 기사는 Howtoforge 셸 스크립팅 튜토리얼 시리즈의 두 번째 부분입니다. 이 시점에서, 여러분은 시리즈의 첫 번째 부분을 읽었고 간단한 스크립트를 생성하고 실행하는 방법을 알고 있다고 가정합니다. 두 번째 부분에서는 사용자로부터 입력을 받고 이를 셸 스크립팅을 통해 처리하는 방법을 배우게 됩니다. 시작해봅시다!
리눅스의 변수
프로그래밍 언어와 마찬가지로, 리눅스 셸은 데이터를 변수에 저장할 수 있는 기능을 가지고 있습니다. 변수는 프로그래밍 언어를 통해 처리될 데이터를 일시적으로 저장하는 컨테이너입니다. 리눅스에는 두 가지 유형의 변수가 있습니다: 환경 변수와 셸 변수입니다.
환경 변수
환경 변수는 리눅스의 기본 변수이며 셸에서 프로세스 간에 정보를 전달하는 데 사용됩니다. 환경 변수는 대소문자를 구분하며, 접근하기 위해 항상 대문자로 작성해야 합니다.
아래 표는 리눅스 셸에서 일반적인 환경 변수를 보여줍니다:
| 변수 이름 | 용도 |
| BASH | Bash 스크립트의 명령 해석기의 전체 경로를 보유합니다 |
| BASH_VERSION | 현재 사용 중인 머신의 bash 릴리스 버전을 보유합니다 |
| HOME | 홈 디렉토리의 상대 경로를 보유합니다. |
| LOGNAME | 현재 로그인한 사용자의 계정 이름을 보유합니다 |
| OSTYPE | 사용 중인 머신의 현재 OS를 설명하는 문자열을 보유합니다 |
| PATH | 리눅스의 실행 파일의 절대 경로를 콜론으로 구분하여 보유합니다 |
| PWD | 셸의 현재 작업 디렉토리를 보유합니다 |
| SHELL | 선호하는 명령줄 셸을 보유합니다 |
| USER | LOGNAME과 유사하게 작동합니다. 현재 로그인한 사용자의 계정 이름을 보유합니다 |
| _ | 셸에서 최근에 사용된 명령의 이름을 보유합니다 |
환경 변수의 값을 표시하려면 사용자는 접근할 변수 앞에 달러 기호($)를 붙여야 합니다. 예를 들어, 현재 작업 디렉토리, 로그인한 사용자 및 OS 유형과 같은 시스템 정보를 표시하기 위해 echo를 사용하여 다음과 같이 합니다:
#!/bin/bash
echo $PWD
echo $LOGNAME
echo $OSTYPE결과는:

리눅스에서 모든 환경 변수의 전체 목록을 얻으려면 env 명령을 사용하십시오.
환경 변수의 값 변경
시스템의 유연성을 제공하기 위해 이러한 환경 변수는 조작할 수 있습니다. 환경 변수에 값을 설정하려면 할당 표현식(등호)을 사용하십시오.
예:
#!/bin/bash
echo $USER
USER="new user"
echo $USER스크립트의 결과는:

스크립트를 실행하면 처음에 echo $USER의 $USER는 USER 변수의 값을 표시합니다. 할당 연산자(=)를 사용하여 USER 변수의 값이 변경됩니다. 그러나 사용자가 환경 변수에 알 수 없는 값을 할당하면 셸은 스크립트의 로컬 컨텍스트에서 환경 변수와 유사한 다른 셸 변수를 생성하지만 다른 응용 프로그램의 동작에는 영향을 미치지 않습니다. 즉, 스크립트가 종료되면 USER 변수는 기본 값을 유지합니다.
이전 예제에서와 같이 환경 변수의 값을 조작할 때는 변수 이름에서 달러 기호($)를 생략합니다. 또한 할당 연산자를 사용할 때는 USER와 = 기호 사이에 공백이 없어야 합니다. 그 사이에 공백을 추가하면 오류가 발생합니다.
셸 변수
셸은 또한 사용자가 변수를 선언할 수 있도록 허용합니다. PHP와 마찬가지로, 셸 스크립트에서 변수를 선언할 때 사용자는 데이터 유형을 선언하는 것에 대해 걱정할 필요가 없습니다. 인터프리터는 사용자가 런타임 동안 저장하는 데이터에 따라 변수의 데이터 유형을 자동으로 감지합니다.
셸 변수 이름 지정 규칙
모든 프로그래밍 언어와 마찬가지로, 셸 변수 이름 지정에는 규칙이 있습니다. 다음은 규칙을 요약한 것입니다:
- 변수 이름은 문자 또는 밑줄로 시작해야 합니다.
- 알파벳 숫자 문자 또는 밑줄만 포함해야 합니다.
- 변수는 대소문자를 구분하므로, 변수 path, PATH 및 Path는 다릅니다.
이 규칙을 증명하기 위해 아래에 간단한 스크립트를 작성하겠습니다:
#!/bin/bash
12abc=10
abc#*=10
_abc=10
_ABC=2
echo $12abc $abc#* $_abc $_ABC2행과 3행은 “command not found” 오류를 반환합니다. 왜냐하면 변수 12abc는 숫자 문자로 시작하고 변수 abc#*는 불법 문자를 포함하고 있기 때문입니다. 또한 _abc와 _ABC가 서로 다른 변수임을 증명했으며, _ABC=2 행은 _abc의 값을 덮어쓰지 않습니다.

read 명령을 사용하여 셸 변수에 값 할당하기:
read는 사용자로부터 입력을 받을 수 있게 해주는 명령입니다. read 명령을 사용하는 구문은 다음과 같습니다:
read <변수_이름>예를 들어, 사용자가 자신의 이름과 성을 입력하고 이를 표시하는 스크립트를 작성하겠습니다. 사용자에게 무엇을 해야 하는지 알리기 위해 echo 명령으로 사용자 프롬프트를 표시합니다.
#!/bin/bash
echo "당신의 이름: "
read fname
echo "당신의 성:"
read lname
echo "안녕하세요 $fname $lname ! 저는 셸 스크립트를 만드는 방법을 배우고 있습니다."결과는:

이전 예제와 마찬가지로, 변수를 사용하기 위해 변수를 선언할 필요가 없습니다. 인터프리터는 read 명령에서 사용되는 변수를 자동으로 생성합니다. 그러나 예제에서는 사용자에게 프롬프트를 생성하기 위해 echo 명령을 반복적으로 사용했습니다. read 명령은 사용자 입력을 받을 때 프롬프트를 생성할 수 있는 기능도 가지고 있습니다. read 명령에서 프롬프트를 사용하는 구문은 다음과 같습니다:
read -p "당신의 프롬프트: " <변수_이름>이전 코드를 단순화하기 위해 코드를 다음과 같이 재구성할 수 있습니다:
#!/bin/bash
read -p "당신의 이름: " fname
read -p "당신의 성: " lname
echo "안녕하세요 $fname $lname ! 저는 셸 스크립트를 만드는 방법을 배우고 있습니다."read 명령의 또 다른 장점은 텍스트 바로 뒤에 명령 프롬프트가 위치하고 다음 줄에 위치하지 않는다는 것입니다.

read 명령은 비밀번호를 수락하는 데에도 사용할 수 있습니다. 일반 입력과 달리 비밀번호는 보안을 위해 마스킹됩니다. 비밀번호를 수락하는 구문은 다음과 같습니다:
read -s -p "당신의 프롬프트" <변수_이름>셸을 사용한 간단한 산술 수행
입력을 받고 출력을 표시하는 것 외에도, bash 셸은 내장 산술 옵션도 가지고 있습니다. 아래 표는 Bash 셸의 내장 산술 연산자를 요약한 것입니다.
| 연산자 | 설명 | 구문 | 용도 |
| + | 덧셈 | a=$((b+c)) | b와 c의 값을 더하고 이를 변수 a에 저장합니다 |
| - | 뺄셈 | a=$((b-c)) | b에서 c의 값을 빼고 이를 변수 a에 저장합니다 |
| * | 곱셈 | a=$((b*c)) | b와 c의 값을 곱하고 이를 변수 a에 저장합니다 |
| / | 나눗셈 | a=$((b/c)) | b를 c로 나누고 이를 변수 a에 저장합니다 |
| % | 나머지 | a=$((b%c)) | b와 c의 나머지 나눗셈을 수행하고 이를 변수 a에 저장합니다 |
| ++ | 전위 증가 | $((++aa)) | 변수 a의 값을 즉시 증가시킵니다 |
| ++ | 후위 증가 | $((a++)) | 변수 a의 값을 증가시키고 다음 줄에 변경 사항을 반영합니다 |
| – | 전위 감소 | $((–a)) | 변수 a의 값을 즉시 감소시킵니다 |
| – | 후위 감소 | $((a–)) | 변수 a의 값을 감소시키고 다음 줄에 변경 사항을 반영합니다 |
| 거듭제곱 | $((a2)) | a의 값을 2의 지수로 올립니다 | |
| += | 더하기 할당 | $((a+=b)) | a와 b의 값을 더하고 이를 변수 a에 저장합니다 |
| -= | 빼기 할당 | $((a-=b)) | b의 값을 a에서 빼고 이를 변수 a에 저장합니다 |
| *= | 곱하기 할당 | $((a*=b)) | a와 b의 값을 곱하고 이를 변수 a에 저장합니다 |
| /= | 나누기 할당 | $((a/=b)) | a를 b로 나누고 이를 변수 a에 저장합니다 |
| %= | 나머지 할당 | $((a%=b)) | a와 b 사이의 나머지 나눗셈을 수행하고 이를 변수 a에 저장합니다 |
모든 산술 명령을 수행할 때마다 모든 변수는 달러 기호와 이중 괄호로 묶여야 합니다. 이렇게 하면 인터프리터가 변수의 값을 정수로 처리합니다. 그렇지 않으면 인터프리터는 변수의 값을 문자열로 처리합니다. 예를 보려면 아래 스크립트를 참조하십시오:
#!/bin/bash
read -p "정수 1 입력: " a
read -p "정수 2 입력: " b
echo $((a+b))
c=$a+$b
echo $c예제를 실행하면 $((a+b)) 행은 사용자의 값을 각각 변수 a와 b에 저장하고 더합니다. 반면 c=$a+$b는 변수 a와 b를 문자열로 처리합니다.

결론
우리는 입력을 받고 이를 변수에 저장하는 방법과 bash 셸 스크립팅에서 산술 연산을 수행하는 방법을 다루었습니다. 다음 부분에서는 제어 구조, 특히 결정 구조를 다룰 것입니다.
참고 문헌:
The Linux Information Project. (2007). 2015년 4월 29일 검색, Linfo.org: http://www.linfo.org/
Cooper, M. (n.d.). Advanced Bash Scripting Guide. 2015년 4월 29일 검색, http://www.tldp.org/LDP/abs/html/
Environment Variables. (n.d.). 2015년 4월 29일 검색, Ubuntu Documentation: https://help.ubuntu.com/community/EnvironmentVariables
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.