ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 셸스크립트- for, seq, while, expr, getopts
    Linux 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
    done

    do 와 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
    3

    num 변수에 대입된 것은 숫자 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
Designed by Tistory.