본문 바로가기
Today I learned

[bash script]더운여름 셸 스크립트와 함께 해요!

by soheemon 2020. 8. 24.

더운여름 셸 스크립트와 함께 해요!

실내온도 30도! 더운 여름휴가를 셸스크립트와 함께 보내는 시원한 프로젝트

한빛미디어 - 유닉스 리눅스 셸 스크립트 예제 사전을 요약한 내용입니다.

1) 실행권한 추가
chmod +x "$script name"
2) 문법 에러 확인 
문법에러가 있으면 표시되고, 없다면 아무것도 표시되지 않는다.
sh -n "$script name"

001 명령어 옵션 처리하기

#!/bin/sh

# -a옵션이 지정되었는지 판단하는 셸 변수 a_flag
# 0으로 초기화하고 설정되었다면 1로 바꾸는것이 일반적이다
a_flag=0
separator=""
# 실제로 getopts로 옵션을 해석한다. 옵션에 사용된 문자는 getopts인수로 나열하며
# 그 옵션 자체가 인수를 받는것은 콜론으로 지정한다. 예) ap: = a옵션과 p옵션을 사용한다. p: p옵션은 인수를 받는다.
# 인수가 있는 옵션을 여러개 쓰고 싶을 때는 콜론을 붙여서 나열한다 "ap:x:z:"
# 사용자가 입력한 옵션은 option 변수로 받아서 case문에서 분기처리한다.
while getopts "ap:" option
do

    case $option in
        a)
            a_flag=1
            ;;
        p)
            separator="$OPTARG" #p다음에 들어오는 인수는 OPTARG에 저장된다.
            ;;
        /?)
            echo "Usage: getopt.sh [-a] [-p separator] target_dir" 1>&2
            exit 1
            ;;
    esac
done

#옵션 지정을 위치 파라미터에서 삭제하기
# OPTIND는 '차례를 기다리고 있는 다음 파라미터의 위치'
# 
shift $(expr $OPTIND - 1)
path="$1"
if [ -z "$path" ]; then
    path=`pwd`
fi

# -a 옵션이 지정되었는지 셸 변수 a_flag값으로 판단하기
if [ $a_flag -eq 1 ] ; then
    # --를 붙이면 path가 -로 시작하더라도 옵션이 아니라고 인식한다.
    ls -a -- "$path"
elif [ -n "$path" ] ; then
    ls -- "$path"
else
    echo "Usage: getopt.sh [-a] [-p seoaratir] target_dir"
    exit 1
fi

# 문자열이 비었는지 여부를 판단한다.
if [ -n "$separator" ]; then
    echo "$separator"
fi

댓글