1. 개요
Windows에 배치 프로그램(bat)이 있다면 Linux에는 쉘 스크립트가 있다.
쉘 스크립트는 리눅스의 기본 명령어를 조합해서 만들기 때문에 보통 짠다고 한다.
그래서 명령어와 옵션을 많이 알수록 유리하다.
쉘 스크립트는 인터프리터 언어(↔ 컴파일 언어)이기 때문에 프로그램 실행시 맨 위에서부터 한줄 한줄 실행이 된다.
따라서 컴파일 언어에 비해 속도가 느리지만, 테스트 프로그램을 작성할 때는 바로바로 결과를 알 수 있기 때문에 많이 사용한다.
2. Script
# 사용할 shell을 맨 처음에 쓴다.
#!/bin/sh
# 주석은 맨 앞에 #을 붙이면 된다.
##### 변수 사용법
# 변수명=값
# 쉘은 변수 type이 없어서 매우 편하다.
# 이 때 = 사이에 공백이 있으면 안 된다.
# 값에 공백이 있을경우 ""로 묶어주고, 값에 명령어가 들어갈 경우 ``로 묶어준다.
# 변수 사용법 : $변수명
# 변수의 종류에는 전역변수(env), 지역변수(set), 예약변수, 매개변수가 있다.
# 전역변수 : 환경변수라고도 하며, 전체적으로 적용이 되는 변수다. 주로 "PATH"값을 넣을때 많이 사용한다.(~/.bashrc or /etc/profile 참고)
# 지역변수 : set 명령어로 확인할 수 있으며 unset으로 해제할 수 있다.
# 예약변수 : 이걸 많이 알면 grep, get 이런 걸 할 필요가 없다. 많이 알수록 좋다. 찾아보기~
# HOME, PATH, LANG, PWD, PPID, SECONDS, SHLVL, SHELL, BASH_RNV, MAIL, OSTYPE, TERM, HOSTNAME, LOGNAME, UID, USER, HISTFILE ...
# 매개변수 : 종류는 많지 않지만 주로 "치환"할 때 많이 사용한다.
string="hello shell"
##### 입력
# 입력받아서 input에 저장됨
echo "input string : "
read input
##### 연산(+-*/)
# expr, 공백 필수!!!
# expr이 없으면 연산이 안 된다.
# *, /, % 연산의 경우 앞에 \를 붙여야 연산이 된다.
expr 3 + 5
expr 8 \* 2
##### 조건문
### if
# 구조 : if [ 조건문 ] ; then
# fi, 공백 필수!!!
# if, elif문에는 반드시 then이 있어야 하고, else에는 then이 없어야 한다.
# [ 조건문 ] 옵션
# - 숫자 비교
# $A -eq $B ; ==
# $A -ne $B ; !=
# $A -gt $B ; >
# $A -ge $B ; >=
# $A -lt $B ; <
# $A -le $B ; <=
# - 파일
# -e $FILE ; exist file, size > 0
# -f $FILE ; file?
# -d $FILE ; directory?
# -w $FILE ; accept write
# -r $FILE ; accept read
# - 문자열
# $A = $B ; ==
# $A != $B ; !=
# -z $A ; length == 0
# -n $A ; length != 0
if [ input = "test" ]
then echo "result : $input"
elif [ input = "aaa" ]
then echo "result : $input"
else
echo "ERROR"
fi
### case
# 구조 : case 변수 in
# esac 필수!!!
# 모든 조건 미충족시 *) 실행
case $input in
1)
echo "input 1"
;;
2)
echo "input 2"
;;
*)
echo "input error"
;;
esac
##### 반복문
# do, done, 공백 필수!!!
### for
# 구조 : for 변수 in 갯수
for CNT in 1 2 3 4 5
do
echo $CNT
done
### while
# 구조 : while [ 조건 ]
# while 1 or while true ; 무한 루프
cnt=1
while [ cnt -le 5 ]
do
echo $cnt
cnt=`expr $cnt + 1`
done
### until
# 구조 : until [ 조건 ] ; while 반대
until [ $input == "hello" ]
do
echo "input hello"
done
##### 함수
# 구조 : 함수명() {}
# 함수 사용시에는 함수명만 쓰면 됨!
menu_print() {
echo "this is menu"
}
menu_print
##### echo
# echo `last` 와 같이 실행할 경우 개행이 되지 않는다.
echo `last`
# 여러줄의 명령어를 변수에 넣거나 echo할 경우 ""를 붙여주면 된다.
echo "`last`"
##### continue, break
# C 언어와 동일