10 강. 쉘스크립트 쉘스크립트 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다른운영체제로이식되지않음 -스크립트언어를사용하면컴파일과정이없고인터프리터가소스파일에서명령문을판독하여각각의명령을수행 쉘스크립트언어 일반적으로.sh 라는확장자를가짐 01 : 02 : echo Heo Linux 01 : 는해당스크립트를실행하기위한쉘의경로 02 : 실제명령 스크립트파일에실행권한을부여해야실행가능 chmod u+x myscript.sh./ 파일명 으로실행 예 :./myscript.sh 쉘스크립트예 mydir 파일을작성한후실행권한을부여하고실행함 vi mydir 로파일을편집 (i로입력모드, <Esc> 로명령모드, ZZ) s * > ~/mydir.txt cat ~/mydir.txt more 실행권한부여 chmod 'u+x,g+x' mydir 또는 chmod +x mydir 실행./mydir 리다이렉션 (redirection) 리다이렉션은입력과출력의방향을파일로바꾸는것 표준입력 (stdin), 표준출력 (stut), 표준에러 (stderr) 표준입력을파일로지정 : < 또는 << 사용 표준출력을파일로지정 : > 또는 >> 사용 예 : cat x y > hod
표준에러를파일로지정 예 : cat x y 2> hod 표준에러를파일로, 표준출력을표준에러로보내기 예 : cat x y 2> hod 1>&2 쉘스크립트와변수 환경변수 초기설정에대한정보를저장하는변수 : HOME, PATH 등 특수변수 쉘프로그램에전달되는특수변수 $ { 인수번호 } : 명령행인수 (argument) $? : 직전명령의상태값 $# : 명령행인수의개수 예 : echo $0 $1 또는 s $ {1 } > ~/mydir.txt 프로그램변수 쉘스크립트의변수는필요시선언하여사용할수있음 변수의데이터타입 ( 숫자, 문자, 문자열 ) 을정할필요없음 변수선언 변수명 = 값 STR="Have a good day!" echo $STR 조건문 조건이만족되면수행 (if~) a=10 b=20 if [ $a -t $b ]; then echo $b 조건이만족되거나조건이만족되지않을때 (if~ ) if [ $ {1 } -gt $ {2 } ]; then echo $ {1 } echo $ {2 } 여러조건이주어지거나아무조건도만족되지않을때 (if~ eif~ )
if [ $ {1 } -t 1 ]; then echo "Less than 1" eif [ $ {1 } -gt 3 ]; then echo "Greater than 3" if [ $ {1 } -eq 1 ]; then echo "one" eif [ $ {1 } -eq 2 ]; then echo "two" eif [ $ {1 } -eq 3 ]; then echo "three" 조건검사 test 조건식또는 [ 조건식 ] 정수비교조건식 A eq B : A와 B의값이같음 예 : if [ $# -eq 0 ] ($# 은명령행인수의개수 ) A ne B : A와 B의값이같지않음 A gt B : A가 B보다큼 A t B : A가 B보다작음 A ge B : A가 B보다크거나같음 A e B : A가 B보다작거나같음 문자열비교조건식 string1 = string2 : string1과 string2가같음 ( 또는 ==) 예1 : if [ $1 = hi ] 예2 : if test $1 == "hi" string1!= string2 : string1과 string2가같지않음 예 : if [ $1!= 'bye' ] string : string이정의되어있고 NULL 이아님 -z string : string이정의되어있지않거나 NULL 임 파일비교조건식 -e e : e이존재함 -f e : e이존재하며일반파일이고디렉터리가아님 -d dir : dir이존재하며디렉터리임 -r( 또는 w, x) e : e이존재하며읽기 ( 또는쓰기, 실행 ) 가능
논리연산! 표현식 : NOT을표현조건식1 a 조건식2 : AND을표현조건식1 o 조건식2 : OR을표현 따옴표의의미 ' ' : 안의내용을해석하지않음. 특수문자를일반문자로취급 예 : echo '"$PATH"' ( 안에적힌문자열이그대로출력됨 ) " " : 마찬가지로특수문자를일반문자로취급. 단, 특수문자 $, \, ` 는해석함 예 : echo "'$PATH'" (PATH에설정된경로가 내부에출력됨 ) ` ` 또는 $( ) : 안의내용을실행 (command substitution) 예1 : echo "Today is `date` 또는 : echo "Today is $(date)" 예2 : echo $( expr 3 \* 7 ) 연산자 산술연산자 +, -, *, /, % : 더하기, 빼기, 곱하기, 나누기, 나머지 예 : sum = $(expr $a + $b) 예 : mu = $(expr $a \* $b) <- 백슬래시를사용해야함 예 : mod = `expr $a % $b` 논리연산자!, &&, : NOT, AND, OR 예 : if [ $# -gt 0 ] && [ $# -t 4 ] 예 : if [$# -gt 0 -a $# -t 4 ] <- 대괄호안에서 a를사용함 순환문 ~ ne 사이의구문을지정한조건만큼반복순환문의종류 : for, whie, unti for 문 : 각원소에대해구문을수행 whie 문 : 조건이참인동안구문을수행 unti 문 : 조건이거짓인동안구문을수행 순환문 - for 문 for 변수 in ist1 ist2 ist3 또는 for (( 초기값 ; 조건 ; 증가식 )) 문장 ( 들 ) ne for 문조건의예 예1 : for num in 1 2 3 4 5 6 7 8 9 예2 : for (( num=1; num<=9; num++ )) for 순환문사용예
if [ $# -eq 0 ]; then echo "Usage: $0 integer_number" # for num in 1 2 3 4 5 6 7 8 9 for ((num= 1; num<= 9; num++) ) echo " $1 * $num = ` expr $1 \* $num ` " ne 순환문 - whie 문 whie 조건 문장 ( 들 ) ne whie 문조건의예 예1 : whie [ $num e 9 ] 예2 : whie test $num e 9 whie 순환문사용예 if [ $# -eq 0 ]; then echo "Usage: $0 integer_number" num=1 whie [ $num -e 9 ] echo " $1 * $num = $(expr $1 \* $num) " num=`expr $num + 1` ne 순환문 - unti 문 unti 조건 문장 ( 들 ) ne unti 문조건의예 예1 : unti [ $num gt 9 ] 예2 : unti test $num gt 9 unti 문사용예
if [ $# -eq 0 ]; then echo "Usage: $0 integer_number" num=1 unti [ $num -gt 9 ] echo " $1 * $num = $(expr $1 \* $num) " num=` expr $num + 1 ` ne 함수 특정한일을수행하는기능이구현된코드블록 함수정의 function 함수명 { 문장 ( 들 ) } 함수호출방법 함수명또는함수명인자 ( 들 ) 함수사용예 function mut() { for ((i=1; i<=9; i++)) echo " $1 * $i = `expr $1 \* $i` " ne } if [ $# -eq 0 ]; then for ((num=1; num<=9; num++)) mut $num ne mut $1 디버깅 쉘스크립트의첫번째행에 x 를추가
x 실행과정을자세히보여줌 다음문제의정답을고르시오. 13. BASH 쉘에서다음중 abc라는쉘스크립트를디버깅모드에서실행하는옵션은? 1 sh d abc 2 sh -c abc 3 sh s abc 4 sh -x abc 다음문제에대한정답을서술하시오. 16. 다음과같이입력한숫자대로삼각형을출력하는쉘스크립트를작성하시오. Number : 4 **** *** ** * echo -n "Input : " read num whie [ 1 -e $num ] num2=1 whie [ $num2 -e $num ] echo -n "*" et num2=num2+1 ne echo et num=num-1 ne 17. 점수를입력받아입력한점수에대하여학점 (A, B, C, D, F) 으로환산해주는쉘스크립트를작성하시오. 점수의처리조건 A 학점 : 90점이상 B 학점 : 80점이상 C 학점 : 70점이상 D 학점 : 60점이상 F 학점 : 60점미만 처리형태 input : 93
A thank you! bye~! echo -n "input : " read num if [ $num -ge 90 ]; then echo A eif [ $num -ge 80 ]; then echo "B" eif [ $num -ge 70 ]; then echo "C" eif [ $num -ge 60 ]; then echo "D" echo "F" echo "thank you! bye~"