셸은 그 기본 원리만 알면 쉽게 개발할 수 있는 프로그램 중 하나이기 때문에, 셸의 종류는 무궁무진하게 많다. 지금 이 순간에도 새로운 자작 셸이 탄생하고 있을 지도 모른다. 이 포스팅에서는 리눅스에서 주로 많이 접할 수 있는 셸들에 대해서만 다루어 보도록 하겠다.
셸은 크게 본셸(Bourne Shell) 계열과 C셀 계열로 나뉜다. 둘은 첫 눈에 보기에도, 즉 사용자 프롬프트에서부터 차이점이 명확하게 보이기 때문에 헷갈릴 가능성은 걱정하지 않아도 된다. 사용자 프롬프트가 '$'이면 본셸 계열, '%'이면 C셸 계열을 사용하고 있다는 것이다. 대부분의 셸들은 본셸 계열의 기능을 포함하여 확대, 발전한 형태이다. C셸은 본셸의 모든 기능과 명령어 히스토리(history), 별명(alias), 작업 제어 기능을 추가로 가지고 있다.
Bash 쉘은 입력된 명령들을 기억하는 히스토리 기능을 갖고 있다.
history [-rh] [번호]
지금까지 입력된 명령들(히스토리)을 리스트한다.
Bash 쉘에서는 히스토리 기능을 이용하여 이미 실행된 명령을 간단하게 재실행할 수 있다.
형태 | 의미 |
---|---|
!! | 바로 전 명령 재실행 |
!n | 이벤트 번호가 n인 명령 재실행 |
!시작문자열 | 시작문자열로 시작하는 최후 명령 재실행 |
!?서브문자열 | 서브문자열을 포함하는 최후명령 재실행 |
하나의 변수에 여러개의 값(문자열)들을 저장할 수 있는 변수를 리스트 변수(list variable)라고 한다.
리스트 사용 | 의미 |
---|---|
${name[i]} | 리스트 변수 name의 i번째 원소 |
${name[*]} , ${name[@]} | 리스트 변수 name의 모든 원소 |
${#name[*]}, ${#name[@]} | 리스트 변수 name 내의 원소 개수 |
환경 변수는 값이 자식 프로세스에게 상속되지만 지역변수는 그렇지 않다.
환경 변수는 시스템 전체에 적용되는 변수이고
지역변수는 현재 터미널에서만 적용되는 변수이다.