변수만 사용했을 뿐 tail 결과를 syslogresult에 저장한다는 사실은 변함없다.
supreme@master:~$ ./sysloger
좀 더 유용한 예제로 바꾸어 보자. 옵션 없이 tail을 실행하면 열 줄을 출력한다. 원하는 수만큼 출력하려면 -n 옵션을 사용해야 한다. 새로운 $1 변수는 명령행에서 입력하는 스크립트의 인자를 저장하는 위치 매개변수다. 명령 프롬프트에서 ‘./sysloger 5’라고 입력한다면 $1에는 인자로 넘어온 5가 저장되고 tail 명령은 tail /var/log/syslog -n5로 확장될 것이다.
#!/bin/bash
# /home/supreme/sysloger
# syslog 결과를 파일로 저장 ver03 : 위치 매개변수 사용
result=syslogresult
tail /var/log/syslog -n"$1" > $result
결과를 확인해 보자. syslogresult에는 다섯 줄의 결과만 저장된다.
supreme@master:~$ ./sysloger 5
그런데 문제가 생겼다. 인자를 넣지 않고 sysloger를 실행하면 tail 명령의 -n 옵션 다음 값이 없기 때문에 오류가 발생한다. 문제를 해결하고자 line 변수를 하나 추가하고 문자열 대체 연산자로 값을 할당한다. ‘${변수:-기본값}’은 해당 변수가 없으면 변수에 기본값을 저장한다. 인자를 넣지 않고 sysloger를 실행해서 $1이 없으면 line에는 기본값 10이 저장된다. ‘./sysloger 2’라고 입력한다면 $1에는 2가 저장되고 line에는 기본값 대신 2가 저장될 것이다.
#!/bin/bash # /home/supreme/sysloger # syslog 결과를 파일로 저장 ver04 : 변수 기본값 사용 result=syslogresult line="${1:-10}" tail /var/log/syslog -n"$line" > $result