리눅스(Linux), 유닉스(Unix) 종류에 따라 기본적으로 지원되는 쉘이 다르다. RHEL/CentOS는 기본적으로 배시쉘(Bash)을 사용하고, SunOS/Solaris는 본쉘(sh)을 사용한다.
현재 시스템에 설정되어 있는 쉘을 확인하려면 echo $SHELL 명령어를 입력하면 되고, 시스템에서 지원하는 모든 쉘의 종류를 확인하려면 cat /etc/shells 명령어를 입력하면 된다.
쉘의 종류를 확인했더니 배시쉘이 없다면 배시쉘을 설치하거나 본쉘 문법에 맞게 스크립트를 작성해야 한다. 쉘의 종류에 따라 문법의 차이가 존재하는데, 배시쉘 문법에 맞게 작성한 스크립트를 본쉘 환경에서 실행하면 에러가 발생한다.
예를 들면, awk -F ':'는 배시쉘 환경에서 정상적으로 실행된다. 하지만, 본쉘 환경에서 에러가 발생한다. 본쉘 환경에서 실행하려면 awk -F':'로 수정해야 한다. (공백 차이)
○ cat /etc/shells : 시스템에서 지원하는 쉘의 종류가 저장되어 있는 파일
○ echo $SHELL : 현재 로그인 중인 사용자의 쉘
○ 지역 변수 선언 : 변수명=변수값 (앞뒤 공백이 있으면 안된다)
○ 변수 값 출력 : echo $변수명
○ 선언한 변수 확인 : set | grep 변수명
○ 선언한 변수 해제 : unset 변수명
○ _= : 마지막 명령어 기록
○ read 변수명 : 사용자로부터 데이터를 입력받아 변수에 저장
○ echo $변수명 : 변수에 저장된 값 출력
test.sh 기능 : 두 개의 숫자를 입력 받아 변수에 저장을 하고, 변수에 저장된 값 출력
○ #!/bin/sh : 쉘스크립트를 실행할 쉘
○ echo -n "출력 문자열" : 출력 문자열 뒤에서 입력
○ sh 쉘스크립트파일명 : sh, bash, source 등은 쉘스크립트 파일을 실행하는 명령어
test.sh 기능 : 두 개의 숫자를 입력 받아 변수에 저장을 하고, 산술 연산한 값 출력
○ `expr $변수명 + $변수명` : 산술 연산 시 expr을 사용
○ test1=`expr $변수명 + $변수명` : 산술 연산한 값을 변수에 저장
test.sh 기능 : /etc/passwd 파일이 존재하면 파일 목록을 출력하고, /etc/aaa 파일이 존재하면 파일 목록을 출력하고, 두 개의 파일이 없으면 Not Found 문자열 출력
○ -f : 파일 지정
○ -d : 디렉토리 지정
test.sh 기능 : 저장된 변수의 수만큼 반복하여 변수 값 출력
○ i=1 : 최초 1로 초기화
○ $i -le 3 : 3보다 작을 동안 반복 (총 3번 반복)
○ CHK=\${CHK_$i} : CHK_1, CHK_2, CHK_3 변수에 저장된 값을 CHK에 저장
test.sh 기능 : /etc/passwd 파일에서 불필요한 계정이 존재하지 않으면 양호, 존재하면 취약 출력
○ -gt 0 : 좌측 연산의 결과 값이 0보다 크다
○ case $res : res 변수의 값이 Y 또는 N인 경우 처리