어떤 터미널 창을 열었을 때 우리는 쉘을 보게 된다. 이 쉘은 명령어를 입력하여 컴퓨터와 대화하는 프로그램이다. 이 쉘은 프로그램이기 때문에 어떤 터미널 창을 띄울 경우 하나의 프로세스라는 말이다. 리눅스, 맥 OS X에서 기본으로 사용되는 쉘은 Bash 쉘이다 이 Bash 쉘은 유닉스에서 사용되던 본 쉘(Bourne shell)을 GNU에서 확장하여 개발하였다. 이 글에서는 bash 쉘에서 사용하는 문법을 이용해 짧은 쉘 스크립트 프로그램을 짜는 방법을 알아볼 것이다.

    우선 쉘에서는 환경변수와 지역변수가 존재한다. 환경변수는 자식 프로세스에게 상속되는 변수이고 지역변수는 상속되지 않는 변수이다. bash shell창에 $ env를 통해 미리 정해진 환경 변수들을 살펴볼 수 있다. bash shell에서 다음과 같이 변수를 설정할 수 있다.

$ VAR=STRING
$ export VAR

첫 번째 줄과 같이 [변수명]=[문자열]로 지역변수를 설정할 수 있고 두 번째 줄과 같이 export [변수명]을 통해 설정한 지역변수를 환경변수로 만들 수 있다. 이때 주의해야할 점은 '=' 앞뒤에 공백이 있으면 안된다는 것이다.

또 리스트 변수를 선언할 수 있다. 리스트 변수는 다음과 같이 선언할 수 있다.

$ HERO=(LEESOONSHIN KIMYOUSHIN AHNJUNGKEUN YOUKWANSOON)
${HERO[i]} #리스트의 i번째 원소
${HERO[*]} #리스트의 모든 원소
${HERO[@]} #동일
${#HERO[*]} #리스트의 원소 개수
${#HERO[@]} #동일

첫 번째 줄과 같이 괄호( ) 안에 공백으로 원소를 구분하며 나열하여 선언할 수 있다. 그 아래와 같이 C언어와 비슷하게 대괄호 안에 원하는 인덱스의 번호를 주어 해당 원소에 접근할 수 있다. 만약 모든 원소를 사용하고 싶은 경우 인덱스 번호 대신 '*'나 '@'를 주면 된다. 마지막으로 원소의 개수는 모든 원소를 접근하는 방법에다가 리스트 변수명 앞에 '#'을 붙여 나타낼 수 있다. 실제 실행결과는 다음과 같다.

실제 실행 결과

echo라는 명령어는 뒤에 나오는 인자를 화면에 출력해주는 명령어이다. 따라서 변수를 줬을 때 변수의 값을 출력해준다. 변수를 접근하고자할 때는 변수명 앞에 '$'를 붙여줘야한다. 그렇지 않으면 문자열로 인식하여 다음과 같이 출력될 수 있다.

변수명 앞에 '$'를 붙이지 않을 경우

위 사진은 wsl2 Ubuntu-20.04에서 실행한 결과다. 다음 시간에는 이런 변수를 통해 짧은 shell script program을 짜보겠다.

+ Recent posts