-
셸스크립트- for, seq, while, expr, getoptsLinux 2022. 12. 24. 02:47
for, seq, while, expr, getopts의 사용법을 알아본다.
1. for
for 변수명 in 문자열1 문자열2 ...
#!/bin/bash for name in dir1 dir2 dir3; do mkdir $name donedo 와 done 사이의 처리를 반복한다.
2. seq
위의 예제를 seq를 사용하면 더 간단해진다.
#!/bin/bash for i in `seq 1 3`; do mkdir dir$i done` 백쿼테이션 기호로 감싼 부분은 명령어를 결과로 치환한다.
변수 i 에 seq 1 3 을 실행한 결과를 하나씩 대입하게 된다.
3. while
#!/bin/bash num=1 while [ $num -le 3 ]; do echo $num num=`expr $num + 1` done --- 실행 화면 --- 1 2 3num 변수에 대입된 것은 숫자 1이 아니라 문자열 1이다.
[ 식 ] 은 변수 내용을 숫자로 해석하여 조건 판정한다.
num 변수가 나타내는 숫자에 1을 더할 때 expr 명령어를 사용한다. expr은 변수 내용을 숫자로 해석하여 사칙 연산 결과를 돌려준다.
#!/bin/bash num=1 while :; do echo $num if [ $num -ge 3 ]; then break fi num=`expr $num + 1` done --- 실행 화면 --- 1 2 3널 명령어인 : 을 사용하여 무한 반복을 구현할 수도 있다.
4. expr
주요 산술 연산자
val1 + val2 : val1 값에 val2 값을 더한다.
다른 연산자 - , * , / , % 도 동일한 형식을 가진다.
주요 논리 연산자
val1 | val2 : val1 값과 val2 값의 논리합을 구한다.
val1 & val2 : val1 값과 val2 값의 논리곱을 구한다.
주요 등호, 부등호
val1 < val2 : val1 의 값이 val2값 보다 작으면 참(1) , 아니면 거짓(0)을 돌려준다.
다른 등호, 부등호인 > , = , != , <= , >= 도 동일한 형식을 가진다.
5. getopts
while문과 case문을 조합하여 셸 스크립트가 명령줄에서 받은 옵션을 처리할 수 있다.
getopts OptionString OptionName [args..]
#!/bin/bash FLAG=0 while getopts ab: OPT; do case $OPT in a) FLAG=1 ;; b) VALUE=$OPTARG ;; esac done shift `expr $OPTIND - 1` echo FLAG: $FLAG echo VALUE: VALUE echo '$1': $1 --- 실행 화면 --- ./test.sh -a FLAG: 1 VALUE: $1: ./test.sh -b hello world FLAG: 0 VALUE: hello $1: world옵션은 + 또는 -로 시작한다. (-a -b)
: 가 있다면 옵션에 인수가 있다는 것으로 간주한다.
인수로 지정한 값은 $OPTARG 변수에 저장한다.
OPTIND는 1로 초기화 되고 옵션의 인덱스를 의미하며 위의 -b 옵션 예제에선 while 문 이후에 OPTIND 값은 3이 된다.
bash 기준으로 getopts가 호출될 때 +, - 기준으로 다음 옵션으로 넘어갈 때마다 OPTIND가 1씩 증가.
expr $OPTIND - 1 만큼 shift 하면 옵션 부분을 건너뛸 수 있다.
'Linux' 카테고리의 다른 글
traceroute(tracepath) (0) 2022.12.31 셸스크립트 - 함수, bc, sed, awk (0) 2022.12.25 셸스크립트 - $, if, case, [, test (0) 2022.12.24 echo, unset (0) 2022.12.24 xargs, ; (0) 2022.12.22