개요
Shell[셸]은 운영체제 커널에게 사용자의 명령을 전달하기 위한 명령어 해석기로 이해할 수 있다. Ubuntu는 기본적으로 Bash(Bourne-again shell) 셸을 사용하며, Alpine 또는 경량화된 Linux 배포판에서는 Bourne이라는 개발자가 개발한 sh 셸을 기본 셸로 사용하기도 한다. Bash는 과거 사용되었던 sh, csh, ksh의 장점을 모아서 개량한 편의성을 높인 셸이다.
셸 구성
cat /etc/shells # list-up available shells echo $SHELL # Verify current shell chsh bash # Change shell to Bash
변수
변수명은 문자, 숫자 및 언더바(_)로 구성될 수 있으며, 숫자로 시작할 수 없다. 선언한 변수의 값을 확인하기 위해서는 echo 명령을 사용하며 이때 참조되는 변수명은 문자열과 구분하기 위해 $기호를 붙여야 한다. 그렇지 않으면 echo 명령은 변수명으로 인식하지 않고 단순 문자열을 출력하게 된다.
YOUR_VAR_NAME=MyValue # Define a variable echo $YOUR_VAR_NAME # Verify a variable echo YOUR_VAR_NAME # Print a string unset YOUR_VAR_NAME # Delete a variable
환경변수
환경변수(Environment variable)은 프로그램 실행에 영향을 줄 수 있는 변수이다. 환경변수의 변수명은 일반 변수와 구분하기 위해 일반적으로 대문자 및 언더바로만 구성된다.
export ENV_VAR_NAME=MyValue # Define a env var echo $ENV_VAR_NAME # Verify a env var unset YOUR_VAR_NAME # Delete a env var set # Print all variables including functions and environment variables env # Print only environment variables
메타 문자
다음 \ ? $ * % ( ) { } [ ] > >> < << | ; || && & # 문자들은 셸에서 특수한 기능을 담당한다. 이 문자를 그대로 출력하기 위해서는 Escape sequence로 전환하여 출력해야 한다. \는 \ 다음의 문자를 이스케이프 시키며, 따옴표 ' '와 " "는 따옴표 사이의 모든 메타문자를 이스케이프 시킨다. 단, " " 사이의 $와 ` `는 이스케이프 대상에서 제외된다.
중첩 명령
echo "Now is $(date)" echo "Now is `date`"
Alias
보통 자주 사용하는 명령어를 alias 시켜 간단하게 실행할 수 있다. 각 사용자 별 .bashrc 파일을 열어 맨 밑에 아래의 코드를 작성한다.
# User defined alias cls='clear' alias # Print all alias
보통 Windows에서 터미널의 화면을 모두 지울 때 cls 명령어를 사용하는데, Linux 계열에서는 clear 명령을 사용한다. 이를 통일하여 사용하기 위해서 이렇게 alias를 시키고 bash를 다시 열면 Linux에서 cls를 사용할 수 있다.
좀 더 자세하게 현재 디렉터리의 목록을 보여주기 위해서 'l' 커멘드를 변경한다.
#alias l='ls -CF' alias l='ls -ahl --full-time'
Prompt
root로 로그인 시 프롬프트의 색상 옵션이 꺼져 있다. 가독성을 위해 일반 계정과 같이 설정한다.
#xterm-color) color_prompt=yes;; xterm-color|*-256color) color_prompt=yes;;
sed -i 's/ xterm-color) color_prompt=yes;;/ #xterm-color) color_prompt=yes;;\n xterm-color|*-256color) color_prompt=yes;;/' ~/.bashrc
프롬프트 포맷은 환경변수 PS1에서 지정한다.
Shell script
셸 스크립트 파일을 보면 첫 줄에 #!/bin/bash 라는 문구를 볼 수 있다. #은 일반적인 셸 스크립트에서 주석을 나타내지만 셸 스크립트의 첫줄에 #!로 시작하는 라인은 해당 스크립트 파일을 실행할 서브 셸의 경로를 명시하는 용도로 사용된다. 이 라인을 셔뱅(shebang) 또는 해시뱅(hashbang)이라고 한다. 만약 셔뱅을 생략하면 현재 로그인 셸로 해당 스크립트가 실행된다.
Positional parameters
명령 실행 시 전달되는 매개변수들은 공백을 기준으로 구분되어 $0, $1, $2와 같은 변수에 저장되어 전달된다. 스크립트 파일의 전체 경로명은 기본적으로 $0에 저장되며, 이후 추가적인 매개변수는 $1부터 차례대로 할당된다. $9 후부터는 ${10}와 같은 형식으로 중괄호를 명시해줘야 한다. $#은 $0을 제외한 매개변수의 개수이며 $@과 $*에는 전달된 모든 매개변수 항목이 공백으로 구분되어 저장된다.