X
리눅스 시스템 관리 명령어4
명령줄 인수
스크립트 파일을 실행시키는 시점에서 인수를 전달하여 실행하기
directory=/tmp
sources="${directory} $1"
target=$2
실행 시 다음과 같은 형식으로 명령어를 실행한다.
어쩌고.sh /var/log api.log
위와 같이 인수를 여러개 이상(대게 3개 이상)일 경우 명령어를 실행하기 전에 순서에 신경쓰게 되고 많아질수록 헷갈려하기 쉽다. 때문에 이를 옵션값을 이용하여 인자값을 넘길수 있도록 할수있다.
while getopts b:n: OPT ## b,n은 옵션으로 사용할 이름
do
case $OPT in
b) base="$OPTARG" ;; ## -b 인자값으로 받은 값을 base변수에서 사용
n) next="$OPTARG" ;; ## -n 인자값으로 받은 값을 next변수에서 사용
esac
done
조건에 따라 처리 흐름 바꾸기
인수 개수에 따른 처리 흐름 바꾸기
if [$# = 2] # '$#'은 스크립트에 지정한 인수 개수
then
echo "Hello!"
fi
옵션의 존재 유무로 조건 분기
while getopts b: OPT ## b,n은 옵션으로 사용할 이름
do
case $OPT in
b) base="$OPTARG" ;; ## -b 인자값으로 받은 값을 base변수에서 사용
esac
done
if [ "$base" != ""]
then
echo "base variable is empty"
fi
인자값으로 조건 분기
if [ "$base" = "/var/log"]
then
echo "good"
fi
명령어 이상 종료
$?
는 이전 명령어의 종료 상태를 말한다. $?
의 값이 0이라는 것은 정상 종료라는 것을 뜻한다.
반복 실행
./create-report.sh api.log
./create-report.sh front.log
./create-report.sh admin.log
위의 명령어들을 아래와 같은 반복문을 활용하여 실행가능하다.
for filename in api.log front.log admin.log
do
./create-report.sh $filename
done
반복문에서는 다음과 같이 명령어의 실행 결과로도 사용할 수 있다.
for filename in 'cd /var/log; ls *.log | grep -v error.log'
셸 함수
main(){
hello mo
hello kim
}
hello(){
echo "$1 하이"
echo "바이"
}
main
마치며
- 추상화를 잘하면 쉘스크립트의 힘을 100퍼 활용할 수 있다.