ShellScript의 기본기
Hello, World…!!!
#!/bin/sh
echo "Hello, World...!!!"
코멘트
#!/bin/sh
# 여기는 코멘트이다.
# 코멘트처리된 구문은 실행되지 않는다.
echo "Hello, World...!!!"
입력/출력
#!/bin/sh
read NAME
echo "Hello, $NAME...!!!"
변수
#!/bin/sh
var="변수1"
VaR_2="변수2"
echo "Var_2=$VaR_2"
VaR_2="VaR_2가 변경됐다"
echo ${VaR_2}
readonly var
var="readonly var를 바꿔보자"
snoopy_kr@iMac ~ % ./test.sh
Var_2=변수2
VaR_2가 변경됐다.
shell.sh: line 11: var: readonly variable
특별한 변수
변수 |
기능 |
$0 |
스크립트명 |
$1~$9 |
인수, 첫 번째의 인수는 $1, 2번째 인수는 $2로 액세스 |
$# |
스크립트에 전달된 인수의 수 |
$* |
모든 인수를 모아 하나로 처리 |
$@ |
모든 인수를 각각 처리 |
$? |
직전에 실행한 커맨드의 종료 값(0은 성공, 1은 실패) |
$$ |
이 쉘 스크립트의 프로세스 ID |
$! |
마지막으로 실행한 백그라운드 프로세스 ID |
#!/bin/sh
echo "\$0(스크립트 명): $0"
echo "\$1(1번째 인수): $1"
echo "\$2(2번째 인수): $2"
echo "\$#(인수의 수): $#"
echo "\"\$*\": \"$*\""
echo "\"\$@\": \"$@\""
VAR="exit값은0이 될 것이다."
echo $?
snoopy_kr@iMac ~ % ./test.sh first second 3rd
$0(스크립트 명): test.sh
$1(1번째 인수): first
$2(2번째 인수): second
$3(3번째 인수): 3rd
$#(인수의 수): 3
"$*": "first second third"
"$@": "first second third"
0
특수 문자
* ? [ ' " ` \ $ ; & ( ) | ~ < > # % = 스페이스 탭 개행
변수 값의 치환
문법 |
설명 |
${var} |
변수 값을 바꿔 넣는다. |
${var:-word} |
변수가 아직 세팅되지 않거나 공백 문자열의 경우 word를 반환한다. var에는 저장되지 않는다. |
${var:=word} |
변수가 아직 세팅되지 않거나 공백 문자열의 word를 반환한다. var에 저장된다. |
${var:?word} |
변수가 아직 세팅되지 않거나 공백 문자열의 경우 치환에 실패하고, 스탠다드 에러에 에러가 표시된다. |
${var:+word} |
변수가 세팅되지 않은 경우 word가 반환된다. var에는 저장되지 않는다. |
#!/bin/sh
echo "\$0(스크립트 명): $0"
echo "\$1(1번째 인수): $1"
echo "\$2(2번째 인수): $2"
echo "\$#(인수의 수): $#"
echo "\"\$*\": \"$*\""
echo "\"\$@\": \"$@\""
VAR="exit값은0이 될 것이다."
echo $?
snoopy_kr@iMac ~ % ./test.sh
1 - wordSetInEcho1
2 - var =
3 - wordSetInEcho3
4 - var = wordSetInEcho3
5 -
6 - var =
7 - wordSetInEcho7
8 - var = newVarValue
9 - newVarValue
10 - var = newVarValue
배열 (Bash)
#!/bin/bash
#bash shell로 배열을 작성하는 방법
ARRAY=(item1 item2 item3 item4)
ARRAY[0]="ITEM1"
ARRAY[2]="ITEM3"
echo "ARRAY[0]: ${ARRAY[0]}"
echo "ARRAY[1]: ${ARRAY[1]}"
#모든 아이템에 액세스
echo "ARRAY[*]: ${ARRAY[*]}"
echo "ARRAY[@]: ${ARRAY[@]}"
snoopy_kr@iMac ~ % ./test.sh
ARRAY[0]: ITEM1
ARRAY[1]: item2
ARRAY[*]: ITEM1 item2 ITEM3 item4
ARRAY[@]: ITEM1 item2 ITEM3 item4
오퍼레이터
연산자 |
의미 |
예 |
+ |
덧셈 |
echo expr 10 + 20 => 30 |
- |
뺄셈 |
echo expr 20 - 10 => 10 |
* |
제곱 |
echo expr 11 \* 11 => 121 |
/ |
나눗셈 |
echo expr 10 / 2 => 5 |
% |
나머지 |
echo expr 10 % 4 => 2 |
= |
자정 |
a=$b b의 값은 a에 저장된다 |
== |
동일 |
[ “$a” == “$b” ] $a과 $b가 동일하는 경우 TRUE가 반환된다. |
!= |
다름 |
[ “$a” != “$b” ] $a과 $b가 동일하지 않는 경우 TRUE가 반환된다. |
비교 |
의미 |
예 |
-eq |
동일 |
[ “$a” -eq “$b” ] 와 $a와 $b가 동일한 경우 TRUE가 반환된다. |
-ne |
다름 |
[ “$a” -ne “$b” ] $a와 $b가 동일하지 않은 경우 TRUE가 반환된다. |
-gt |
보다 큼 |
[ “$a” -gt “$b” ] $a가 $b보다 큰 경우 TRUE가 반환된다. |
-lt |
보다 작음 |
[ “$a” -lt “$b” ] $a가 $b보다 작은 경우 TRUE가 반환된다. |
-ge |
보다 크거나 같거나 |
[ “$a” -ge “$b” ] $a가 $b보다 크거나 같은 경우 TRUE가 반환된다. |
-le |
보다 작거나 같거나 |
[ “$a” -le “$b” ] $a가 $b보다 작거나 같은 경우 TRUE가 반환된다. |
! |
(이)가 아니다 |
[ ! “$a” -gt “$b” ]$a가 $b보다 크지 않은 경우 TRUE가 반환된다. |
-o |
어느쪽이든 |
[ “$a” -gt “$b” -o “$a” -lt “$b” ]$a가 $b보다 크거나 작은 경우 TRUE가 반환된다. (Bash 확장 / POSIX폐지 예정) |
-a |
양쪽 |
[ “$a” -gt 90 -a “$a” -lt 100 ] $a가 90보다 크고 100보다는 작은 경우 TRUE가 반환된다. |
-z |
문자열이 비었는가 |
[ -z “$a” ]$a에 어떤 것도 지정되지 않은 경우 TRUE가 반환된다. |
-n |
문자열이 비었는가 |
[ -n “$a” ] $a에 어떠한 것이 지정되어 있다면 TRUE가 반환된다. |
if 조건
#!/bin/sh
if [ "$1" -gt "$2" ]
then
echo "1번째 인수가 2번째 인수보다 크다"
elif [ "$1" -eq "$2" ]
then
echo "1번째 인수와 2번째 인수가 동일하다"
else
echo "1번째 인수가 2번째 인수보다 작다"
fi
snoopy_kr@iMac ~ % ./test.sh 2 7
1번째 인수가 2번째 인수보다 작다
snoopy_kr@iMac ~ % ./test.sh 10 5
1번째 인수가 2번째 인수보다 크다
snoopy_kr@iMac ~ % ./test.sh 9 9
1번째 인수와 2번째 인수가 동일하다
Switch 조건
#!/bin/sh
DRINK="coffee"
case "$DRINK" in
"beer") echo "맥주입니다"
;;
"juice") echo "주스입니다"
;;
"coffee") echo "프로그래머가 마시면 커피로 변화!"
;;
esac
snoopy_kr@iMac ~ % ./test.sh
프로그래머가 마시면 커피로 변화!
while 루프
#!/bin/sh
a=0
while [ $a -lt 5 ]
do
echo $a
a=`expr $a + 1`
done
snoopy_kr@iMac ~ % ./test.sh
0
1
2
3
4
until 루프
#!/bin/sh
a=0
until [ ! $a -lt 5 ]
do
echo $a
a=`expr $a + 1`
done
snoopy_kr@iMac ~ % ./test.sh
0
1
2
3
4
for 루프
#!/bin/sh
for var in 0 1 2 3 4 #범위의 작성법(Bash독자) => {0..4}
do
echo $var
done
snoopy_kr@iMac ~ % ./test.sh
0
1
2
3
4
함수
#!/bin/sh
#함수를 작성한다
MyFunction () {
echo "함수의 echo이다."
}
MyParamFunc() {
echo "인수1:$1 인수2:$2"
}
#함수를 호출한다
MyFunction
MyParamFunc param1 param2
snoopy_kr@iMac ~ % ./test.sh
함수의 echo이다.
인수1:param1 인수2:param2
댓글남기기