사용자가 입력한 명령을 해석하여 커널로 전달하거나 커널의 처리 결과를 사용자에게 전달하는 역할이며, CLI모드의 서버 또는 터미널처럼 명령을 입력하는 환경이 셸이라고 생각할 수 있다.
| 환경 변수 | 설명 | 환경 변수 | 설명 | |
|---|---|---|---|---|
| HOME | 현재 사용자의 홈 디렉토리 | PATH | 실행 파일을 찾는 디렉토리 경로 | |
| LANG | 기본 지원되는 언어 | PWD | 사용자의 현재 작업 중인 디렉토리 | |
| TERM | 로그인 터미널 타입 | SHELL | 로그인해서 사용하는 셸 | |
| USER | 현재 사용자의 이름 | DISPLAY | X 디스플레이 이름 | |
| COLUMNS | 현재 터미널의 컬럼 수 | LINE | 현재 터미널 라인 수 | |
| PS1 | 1차 명령 프롬프트 변수 | PS2 | 2차 명령 프롬프트(대부분은 '>') | |
| BASH | bash 셸 경로 | BASH_VERSION | bash 버전 | |
| HISTFILE | 히스토리 파일 경로 | HISTSIZE | 히스토리 파일에 저장되는 개수 | |
| HOSTNAME | 호스트의 이름 | USERNAME | 현재 사용자 이름 | |
| LOGNAME | 로그인 이름 | LS_COLORS | ls 명령어의 확장자 색상 옵션 | |
| 메일 보관 경로 | OSTYPE | 운영체제 타입 |
# 형태
echo $환경 변수
# 예시
echo $HOME
리눅스의 대부분은 C 언어로 작성했기 때문에 셸 스크립트는 C 언어와 유사한 방법으로 프로그래밍이 가능하다.
다르게 얘기하면 리눅스의 많은 부분이 셸 스크립트로 작성되었다는 것이다.
예를들어 GRUB2의 설정파일인 /boot/grub2/grub.cfg 파일도 셸 스크립트 문법을 사용한다.
#!/bin/sh
echo "user name : " $USER
echo "home directory : " $HOME
exit 0
- bash를 사용하겠다는 의미로 첫 행에 꼭 써야한다.
- echo는 간단하게 생각하면 printf 등과 동일한 기능이다. $USER는 환경변수의 내용이다. 따라서 2행에 의한 결과는 $USER 환경 변수를
user name :뒤에 출력하게 될 것이다.- exit는 종료 코드를 반환하게 한다. 다른 스크립트에서 이 스크립트를 호출 후 제대로 실행된지 여부를 확인하기 위해서는 적절한 종료코드를 반환하는 것이 중요하다. 셸 스크립트는 성공여부와 관계없이 성공했다는 메세지를 반환하기 떄문에 직접 마지막 행에서 성공 여부를 반환하는 것이 좋다. 0의 의미는 성공을 의미한다.
# sh 활용
sh test.sh
# 속성 변경 방법(x 권한 추가)
chmod +x test.sh
./test.sh
[root@localhost ~]# testval = hello
bash: testval: command not found
[root@localhost ~]# testval=hello
[root@localhost ~]# echo $testval
hello
[root@localhost ~]# testval=hello world
bash: testval: command not found
[root@localhost ~]# testval="hello world"
[root@localhost ~]# echo $testval
hello world
[root@localhost ~]# testval=1+2
[root@localhost ~]# echo $testval
1+2
#!/bin/sh
vartest="hello world"
echo $vartest
echo "$vartest"
echo '$vartest'
echo \$vartest
echo Insert Values :
read vartest
echo '$vartest' = $vartest
exit 0
[root@localhost ~]# sh val.sh
hello world
hello world
$vartest
$vartest
Insert Values :
This is Test Script
$vartest = This is Test Script
#!/bin/sh
num1=100
num2=$num1+200
echo $num2
num3=`expr $num1 + 200`
echo $num3
num4=`expr \($num + 200\) / 10 \* 2`
echo $num4
exit 0
[root@localhost ~]# sh cal.sh
100+200
300
60
dnf intsall -y gftp라는 명령을 실행하면 파라미터 변수는 다음과 같이 지정할 수 있다.| 명령 | dnf | -y | install | gftp |
|---|---|---|---|---|
| 파라미터 변수 | $0 | $1 | $2 | $3 |
#!/bin/sh
echo "file name is <$0>"
echo "first parameter is <$1>"
echo "second parameter is <$2>"
echo "total parameter is <$*>"
exit 0
[root@localhost ~]# sh parameter.sh val1 val2 val3
file name is <parameter.sh>
first parameter is <val1>
second parameter is <val2>
total parameter is <val1 val2 val3>