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 언어와 동일