셸 - 변수

김상우·2022년 8월 14일

Shell

목록 보기
1/4
post-thumbnail

셸(Shell)

사용자가 입력한 명령을 해석하여 커널로 전달하거나 커널의 처리 결과를 사용자에게 전달하는 역할이며, CLI모드의 서버 또는 터미널처럼 명령을 입력하는 환경이 셸이라고 생각할 수 있다.

  • bash shell 기능
    • alias
    • history
    • 연산
    • job control
    • 자동 이름 완성(tab)
    • prompt control
    • 명령 편집

환경 변수

환경 변수설명환경 변수설명
HOME현재 사용자의 홈 디렉토리PATH실행 파일을 찾는 디렉토리 경로
LANG기본 지원되는 언어PWD사용자의 현재 작업 중인 디렉토리
TERM로그인 터미널 타입SHELL로그인해서 사용하는 셸
USER현재 사용자의 이름DISPLAYX 디스플레이 이름
COLUMNS현재 터미널의 컬럼 수LINE현재 터미널 라인 수
PS11차 명령 프롬프트 변수PS22차 명령 프롬프트(대부분은 '>')
BASHbash 셸 경로BASH_VERSIONbash 버전
HISTFILE히스토리 파일 경로HISTSIZE히스토리 파일에 저장되는 개수
HOSTNAME호스트의 이름USERNAME현재 사용자 이름
LOGNAME로그인 이름LS_COLORSls 명령어의 확장자 색상 옵션
MAIL메일 보관 경로OSTYPE운영체제 타입
  • 환경 변수 확인 방법
# 형태
echo $환경 변수
# 예시
echo $HOME

셸 스크립트(Shell Script) - 변수

리눅스의 대부분은 C 언어로 작성했기 때문에 셸 스크립트는 C 언어와 유사한 방법으로 프로그래밍이 가능하다.
다르게 얘기하면 리눅스의 많은 부분이 셸 스크립트로 작성되었다는 것이다.
예를들어 GRUB2의 설정파일인 /boot/grub2/grub.cfg 파일도 셸 스크립트 문법을 사용한다.

  • 간단한 예제
#!/bin/sh
echo "user name : " $USER
echo "home directory : " $HOME
exit 0
  1. bash를 사용하겠다는 의미로 첫 행에 꼭 써야한다.
  2. echo는 간단하게 생각하면 printf 등과 동일한 기능이다. $USER는 환경변수의 내용이다. 따라서 2행에 의한 결과는 $USER 환경 변수를 user name : 뒤에 출력하게 될 것이다.
  3. exit는 종료 코드를 반환하게 한다. 다른 스크립트에서 이 스크립트를 호출 후 제대로 실행된지 여부를 확인하기 위해서는 적절한 종료코드를 반환하는 것이 중요하다. 셸 스크립트는 성공여부와 관계없이 성공했다는 메세지를 반환하기 떄문에 직접 마지막 행에서 성공 여부를 반환하는 것이 좋다. 0의 의미는 성공을 의미한다.
  • 실행 방법
    실행 방법은 sh 명령어를 통해 실행하거나 속성 자체를 실행 가능 하도록 변경 후 실행하는 방법이 있다.
# sh 활용
sh test.sh

# 속성 변경 방법(x 권한 추가)
chmod +x test.sh
./test.sh

변수 입출력

  • 변수를 사용하기 전 미리 선언하지 않으며, 처음 변수에 값이 할당되면 자동으로 변수가 생성된다.
  • 변수에 넣는 모든 값은 문자열인 string으로 취급되며, 숫자를 넣어도 문자로 취급된다.
  • 변수 이름은 대소문자를 구문한다.
  • 변수를 대입할 때 '=' 좌우에는 공백이 없어야 한다.
  • 변수에 값을 대입할 때 공백이 있는경우 ""로 묶어서 저장해야한다.
  • 예시
[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

계산

  • 변수에 대한 설명에서 변수에 넣은 값은 모두 문자열로 취급하여 저장된다.
  • 연산을 위해서는 expr 키워드를 사용하면 연산이 가능하지만 수식과 함께 백틱(`)으로 묶어줘야 한다.
  • 수식에 괄호를 사용하기 위해서는 그 앞에 역슬래시()를 붙여줘야 한다.
  • 사칙 연산 기호 중 곱하기를 의미하는(*)도 예외적으로 앞에 역슬래시를 붙여야한다.
  • 예시
#!/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

파라미터

  • 파라미터 변수는 $0, $1, $2 등의 형태를 가진다.
  • 실행하는 명령의 부분 하나하나를 변수로 지정한다는 의미이다.
  • 예시로 dnf intsall -y gftp라는 명령을 실행하면 파라미터 변수는 다음과 같이 지정할 수 있다.
명령dnf-yinstallgftp
파라미터 변수$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>
profile
아침엔 운동하고 밤엔 잠을 잔다.

0개의 댓글