728x90
쉘 스크립트(Shell Script) 변수
- 쉘 변수 : 지역 변수, 환경 변수
- “변수명=값” 형태로 정의와 동시에 값을 저장
- -, =, +, ?에 콜론을 붙이면 변수에 값이 정의되어 있거나 널 값으로 설정되어 있는 지 확인
- 콜론을 사용하지 않으면 널 값으로 정의된 변수도 설정된 것으로 간주
- test는 값이 정의되어 있으므로 정의된 값을 출력
- test1은 값이 정의되어 있지 않으므로 word 값을 출력
$ test=unix
$ echo $test
unix
$ echo ${test:-word}
unix
$ echo ${test1=-word}
word
$
- test는 값이 정의되어 있으므로 대체되지 않고 정의된 값을 출력
- test1은 값이 정의되어 있지 않으므로 주어진 linux라는 값으로 대체됨
$ echo ${test:=word}
unix
$ echo ${test1:=linux}
linux
$ echo ${test1:=temp}
linux
$
- test는 값이 정의되어 있으므로 word 값으로 대체되어 출력
- test 값이 정의되어 있으므로 정의되어 있는 값으로 출력
- test2는 변수가 없으므로 word 출력 후 스크립트 종료(스크립트 파일에서 실행할 경우 종료)
$ echo ${test:+word}
word
$ echo ${test:?word}
unix
$ echo ${test2:?word}
-bash: test2: word
$
쉘 변수 문자열 처리하기
- 변수 값이 문자열일 때 문자열 내에 포함된 패턴을 찾아 일부를 제거할 수 있음
%는 변수의 뒤부터 지정한 패턴과 일치하는 가장 최소 부분을 제거 - 패턴으로 local을 지정하면 아무 것도 삭제되지 않고, local부터 나머지 문자열을 모두 삭제하고 싶으면 패턴을 /local*로 지정해야 함
- %%는 패턴과 일치하는 최대 부분 제거
$ path1=“/usr/bin/local/bin”
$ echo ${path1%/bin}
/usr/bin/local
$ echo ${path1%%/bin*}
/usr
$
- ’#’은 변수에 저장된 문자열의 앞부분부터 일치하는 패턴을 검색하여 최소로 일치하는 부분을 제거
- ’##’은 모든 /가 포함된 문자열을 제거할 수 있어서 경로의 마지막에 나오는 파일 이름만 알아낼 때 유용함
$ path2=“/home/user1/.profile”
$ echo ${path2#/home}
/usr1/.profile
$ echo ${path2##*/}
.profile
$
- ‘#변수’는 변수에 지정된 문자의 개수를 출력
$ echo ${#path1}
18
$ echo ${#path2}
20
$
명령행 인자(파라미터, parameter) 처리하기
- 스크립트 실행할 때 인자로 주어진 값을 스크립트 안에서 처리할 수 있음
- 포지션 인자(Positional Parameter)라고 하는 특수 내장 변수들은, 명령행에 입력된 인자의 순서에 따라 이름이 정해지며 주어진 인자를 저장
- 쉘 스크립트의 이름은 $0 변수에 저장됨
인용 부호 처리
- 스크립트에서 인용 부호는 쉘 특수문자(Metacharacter : $, *, ? 등)의 의미를 없애기 위해 사용
- 인용 부호 : ‘ ’(작은 따옴표), “ ”(큰 따옴표), (역슬래시)
- 작은 따옴표(‘ ’)
- 모든 특수 문자들이 해석되는 것을 막음
- 쌍으로 사용
- 작은 따옴표 자체를 출력시키려면 큰 따옴표 안에서 사용하거나 (역슬래시) 다음에 사용
$ test=100
$ echo $test
100
$ echo ‘$test’
$test
$ echo “ ‘100’ ”
‘100’
$ echo ‘$test
> ^C
$
- 큰 따옴표(“ ”)
- 변수나 명령의 대체를 허용하지만 기타 특수 문자들이 해석되는 것을 막음
- 쌍으로 사용
$ test=200
$ echo $test
200
$ echo “$test”
200
$ echo “$(date)”
2015. 07. 15. (수) 21:17:07 (KST)
$ echo “$test
> ^C
$
- 역슬래시()
- 단일 문자가 해석되는 것을 보호하기 위해 사용
- 큰 따옴표 안에서 역슬래시는 $를 보호하여 해석되지 않도록 함
$ echo \
> ^C
$ echo \\
\
$ test=100
$ test ‘\$test’
\$test
$ echo “$test”
100
$ echo “\$test”
$test
$
명령 대체
- 명령의 출력을 변수로 지정하여 사용하는 것
- 모든 쉘은 백쿼터(`)를 사용하여 명령을 대체함
- 백쿼터는 쌍으로 사용
$ echo date
date
$ echo $date
$ echo `date`
2015. 07. 15. (수) 21:45:54 (KST)
$ echo ‘`date`’
`date`
$ echo “`date`”
2015. 07. 15. (수) 21:53:44 (KST)
$ echo $(date)
2015. 07. 15. (수) 21:53:51 (KST)
$ echo “$(date)”
2015. 07. 15. (수) 21:54:05 (KST)
$
728x90
'프로그래밍 > Unix' 카테고리의 다른 글
쉘 스크립트(Shell Script) 연산자 (0) | 2020.05.09 |
---|---|
쉘 스크립트(Shell Script) 문법 - 사용자로부터 입력 받기 (0) | 2020.05.08 |
유닉스/unix 쉘 스크립트(Shell Script) (0) | 2020.05.06 |
[유닉스/unix] 쉘(Shell) 환경 설정 (0) | 2020.04.30 |
[유닉스/unix] 쉘(Shell) 기본 사용법 (0) | 2020.04.30 |