바시 변수 완벽 정리: 스크립트 필수 7 가지 변수 활용법
안녕하세요, 기술 블로그의 독자 여러분. 오늘 여러분과 공유하고자 하는 주제는 리눅스 자동화와 스크립트 작성의 핵심, 바로 바시 Bash 변수에 대한 것입니다. 바시 스크립트를 공부하다 보면 $0, $? 등의 특수 변수들이 자주 등장하는데, 이것이 무엇인지 어떻게 쓰는지 모르면 효율적인 작업이 불가능합니다. 이 글의 원본은 유명 IT 사이트 How-To Geek 의 전문가 기고인데, 내용을 바탕으로 한국 독자들에게 더 친근하게 재구성했습니다.
스크립팅을 시작하는 분들을 위해 먼저 기초부터 다져보는 시간을 가져보겠습니다. 특히 리눅스 시스템의 동작 원리를 이해하고 싶어 하는 분께 유용할 것입니다. 스크립트 파일이 어디에서 실행되는지 파악하는 것부터 시작해 보겠습니다. 바로 $0 변수입니다. 이 변수는 현재 실행 중인 스크립트의 경로 혹은 이름을 나타냅니다. $0 을 사용하면 스크립트 내에서 현재 실행 파일의 이름을 출력하기 아주 좋습니다. 예를 들어 ls 메뉴의 이름을 자동 추출하게 하거나, 스크립트 이름이 로더 파일에 표시되도록 할 때 유용합니다. 하지만 단순한 $0 은 소스 코드에서 불러올 때 bash 라고만 표시될 수 있어 주의가 필요합니다. 이때는 $BASH_SOURCE 변수를 사용하시면 됩니다. 이는 바시 환경에서 더 안정적으로 파일을 식별해 주기 때문에 스크립트 내부 경로 탐색 시 최적의 선택지입니다. 또한 $(basename $0) 을 사용해서 이름만 추출하는 문법을 배우면 훨씬 좋습니다.
다음은 에러 처리와 밀접한 연관이 있는 $? 변수입니다. 이 변수는 마지막 명령어의 종료 상태를 반환합니다. 성공은 0, 실패는 1 번 이상입니다. 스크립트 작성 시 에러를 놓치면 시스템 설정이 잘못될 수 있습니다. $? 를 활용하여 if 진술문 안에 넣으면 에러가 발생했을 때 중단하거나 로그를 기록하는 것이 가능합니다. 또한 && 연산자는 성공 시 다음 명령어 실행, || 연산자는 실패 시 대안 실행으로, 스크립트의 견고성을 높여줍니다. 예를 들어 디렉터리가 없으면 에러 코드 1 이 뜨지만, 이를 포착하여 사용자에게 메시지를 띄우는 것이죠. 이런 기본기가 없으면 리눅스 명령어 조합 작업에서 자주 당황하게 됩니다. 따라서 $? 의 의미를 잘 알고 활용하는 것이 중요합니다. case 문법으로도 $? 값을 구분하여 성공, 실패, 기타 에러 메시지를 출력할 수 있습니다.
인수 Argument 를 처리하는 법도 알아볼 차례입니다. $1 부터 $9 까지는 전달된 인자 순서에 따라 매핑됩니다. 함수 내부뿐만 아니라 메인 스크립트에서도 동일하게 작동합니다. 모든 인자를 하나의 배열로 가져올 때는 $@를, 하나의 문자열로 결합할 때는 $*를 사용합니다. 인수의 개수는 ${#*} 혹은 ${#@}로 확인합니다. 이는 대량 데이터 처리 스크립트나 명령행 유틸리티 개발 때 필수적입니다. 또한 함수 내에서 인수를 순차적으로 처리할 때 for 문에 $@ 를 넣으면 각 인수를 배열처럼 나열하여 처리할 수 있어 편리합니다. 이러한 문법들은 리눅스 시스템 관리자나 DevOps 엔지니어에게 필수 지식입니다. 명령행 툴체인 환경에서 인수 처리를 안하고 있다면 즉시 보완해 보세요.
마지막으로 환경 변수와 사용자 식별자 관련 변수를 살펴봅니다. $HOME 은 현재 사용자의 홈 경로, $UID 는 현재 세션 사용자 ID, $EUID 는 유효 사용자 ID 입니다. sudo 명령어처럼 권한을 변경할 때는 $UID 와 $EUID 가 다를 수 있습니다. 하드코딩 하는 것보다 환경 변수를 쓰면 유연합니다. 사용자가 여러 명이 사용되거나 클라우드 환경에서 실행될 때 특정 번호를 직접 적어두는 것은 위험합니다. $EUID 는 현재 프로세스가 실제로 어떤 권한으로 접근하는지 보여주므로 시스템 보안 관점에서 매우 중요합니다. setuid 이진 파일을 다룰 때 이 값들 차이를 이해하면 보안 취약점을 예방할 수 있습니다. Graeme Peacock 같은 전문가들이 이러한 변수들을 습득한 것이 바로 이 때문입니다. Docker 컨테이너 환경에서도 이러한 변수 개념은 동일하게 적용되며, 컨테이너 내부의 환경 설정에 필수적입니다. 특히 컨테이너 보안 정책에서 EUID 관리는 핵심입니다.
이 글을 통해 바시 변수에 대한 이해를 좀 더 심화하신 분들은 실전에서 바로 적용할 수 있을 것입니다. 단순히 변수 이름만 외우는 것이 아니라, 각 변수가 어떤 상황에서 어떤 역할을 하는지 직관적으로 파악하시길 바랍니다. 오늘 배운 내용을 스크립트 수정이나 자동화 작업에 적용해보시면 훨씬 편할 것입니다. 더 많은 IT 팁은 저희 블로그를 확인해 보세요. 항상 새로운 기술에 대해 궁금증이 생기는 분들이 많지만, 꾸준히 배워나가면 누구나 전문가 수준에 이를 수 있습니다. 오늘 소개한 7 가지 변수 외에도 더 많은 유틸리티 변수들이 있으니, 필요할 때마다 찾아보시며 공부해 주세요. 스크립트 자동화는 일상을 훨씬 가볍게 만들어 주므로, 오늘 배운 내용을 바탕으로 더 스마트한 시스템 관리를 시작하세요. 리눅스 사용자들이 매일 사용하는 도구이니 꼭 익혀두세요.
이 글은 How-To Geek의 기사를 바탕으로 작성되었습니다.
