보다 완벽한 애플리케이션
오랜 휴식 후, 우리는 작업을 재개할 것입니다. sys_info_page 프로그램입니다. 다음 추가 기능은 다음과 같이 프로그램에 여러 명령줄 옵션을 추가합니다.
● 결과물 파일. 프로그램 출력을 저장할 파일의 이름을 지정하는 옵션을 추가합니다. 다음 중 하나로 지정됩니다. -f 파일 or --파일 파일.
● 대화형 모드. 이 옵션은 사용자에게 출력 파일 이름을 입력하라는 메시지를 표시하고 지정된 파일이 이미 존재하는지 확인합니다. 파일이 이미 존재하는 경우, 기존 파일을 덮어쓰기 전에 사용자에게 메시지를 표시합니다. 이 옵션은 다음 중 하나로 지정됩니다. -i or --인터렉티브.
● 도움. 어느 -h or --도움 프로그램이 유익한 사용 메시지를 출력하도록 지정할 수 있습니다.
명령줄 처리를 구현하는 데 필요한 코드는 다음과 같습니다.
용법 () {
echo "$PROGNAME: 사용법: $PROGNAME [-f 파일 | -i]" return
}
# 프로세스 명령줄 옵션 interactive=
용법 () {
echo "$PROGNAME: 사용법: $PROGNAME [-f 파일 | -i]" return
}
# 프로세스 명령줄 옵션 interactive=
파일 이름=
while [[ -n $1 ]]; $1을 case로 처리합니다.
-f | --파일)
변화
파일 이름=$1
;;
파일 이름=
while [[ -n $1 ]]; $1을 case로 처리합니다.
-f | --파일)
-i | --interactive) 대화형=1
;;
-h | --help) 사용법 종료
;;
*) 사용법 >&2
1 번 출구
;;
-i | --interactive) 대화형=1
;;
-h | --help) 사용법 종료
;;
*) 사용법 >&2
1 번 출구
;;
그 C
교대 완료
그 C
교대 완료

먼저, 우리는 다음과 같은 쉘 함수를 추가합니다. 용법 도움말 옵션이 호출되거나 알 수 없는 옵션이 시도될 때 메시지를 표시합니다.
다음으로 처리 루프를 시작합니다. 이 루프는 위치 매개변수가
$1은 비어 있지 않습니다. 루프의 끝에는 위치 매개변수를 이동시키는 Shift 명령이 있어 루프가 결국 종료되도록 합니다.
루프 내에는 다음이 있습니다. 케이스 현재 위치 매개 변수가 지원되는 선택 사항과 일치하는지 검사하는 명령문입니다. 지원되는 매개 변수가 발견되면 해당 매개 변수에 대한 작업이 수행됩니다. 알 수 없는 선택 사항이 발견되면 사용법 메시지가 표시되고 스크립트가 오류와 함께 종료됩니다.
The -f 매개변수는 흥미로운 방식으로 처리됩니다. 감지되면 추가적인 변화 발생하여 위치 매개변수가 진행됩니다. $1 제공된 파일 이름 인수에 -f 옵션을 선택합니다.
다음으로 대화형 모드를 구현하는 코드를 추가합니다.
# 대화형 모드
if [[ -n $interactive ]]; then while true; do
read -p "출력 파일 이름을 입력하세요: " filename if [[ -e $filename ]]; then
read -p "'$filename'이 존재합니다. 덮어쓰시겠습니까? [y/n/q] > " case $REPLY in
Y|y) 휴식
# 대화형 모드
if [[ -n $interactive ]]; then while true; do
read -p "출력 파일 이름을 입력하세요: " filename if [[ -e $filename ]]; then
read -p "'$filename'이 존재합니다. 덮어쓰시겠습니까? [y/n/q] > " case $REPLY in
Y|y) 휴식
;;
Q|q) echo "프로그램이 종료되었습니다." 종료
;;
*) 계속하다
;;
그 C
elif [[ -z $filename ]]; 그런 다음 계속합니다.
그렇지 않으면
하다
fi
한
fi
;;
Q|q) echo "프로그램이 종료되었습니다." 종료
;;
*) 계속하다
;;
그 C
elif [[ -z $filename ]]; 그런 다음 계속합니다.
그렇지 않으면
하다
fi
한
fi
경우 대화형 변수가 비어 있지 않으면 파일 이름 프롬프트와 그에 따른 기존 파일 처리 코드가 포함된 무한 루프가 시작됩니다. 원하는 출력 파일이 이미 있는 경우, 사용자는 덮어쓰거나, 다른 파일 이름을 선택하거나, 프로그램을 종료하라는 메시지를 받게 됩니다. 사용자가 기존 파일을 덮어쓰도록 선택하면 하다 루프를 종료하기 위해 실행됩니다. 케이스 이 명령문은 사용자가 덮어쓰기 또는 종료를 선택하는지 여부만 감지합니다. 다른 선택을 하면 루프가 계속 진행되고 사용자에게 다시 묻습니다.
출력 파일 이름 기능을 구현하려면 먼저 기존 페이지 쓰기 코드를 셸 함수로 변환해야 합니다. 그 이유는 곧 명확해질 것입니다.
write_html_page() { cat <<- _EOF_
$제목
$제목
$타임스탬프
$(보고서_가동시간)
$(보고서_디스크_공간)
$(리포트_홈_스페이스)
_EOF_ 리턴
}
# 출력 HTML 페이지
if [[ -n $파일 이름 ]]; 그러면
write_html_page() { cat <<- _EOF_
$제목
$제목
$타임스탬프
$(보고서_가동시간)
$(보고서_디스크_공간)
$(리포트_홈_스페이스)
_EOF_ 리턴
}
# 출력 HTML 페이지
if [[ -n $파일 이름 ]]; 그러면
$filename && [[ -f $filename ]];을 터치하면 write_html_page > $filename이 됩니다.
그렇지 않으면
echo "$PROGNAME: '$filename' 파일을 쓸 수 없습니다" >&2 종료 1
그렇지 않으면
write_html_page
fi
$filename && [[ -f $filename ]];을 터치하면 write_html_page > $filename이 됩니다.
그렇지 않으면
echo "$PROGNAME: '$filename' 파일을 쓸 수 없습니다" >&2 종료 1
그렇지 않으면
write_html_page
fi
논리를 처리하는 코드 -f 옵션은 위에 표시된 목록의 끝에 나타납니다. 여기서 파일 이름이 있는지 테스트하고, 파일 이름이 있으면 해당 파일이 실제로 쓰기 가능한지 확인하는 테스트를 수행합니다. 이를 위해 터치 수행된 후, 결과 파일이 일반 파일인지 확인하는 테스트가 이어집니다. 이 두 테스트는 잘못된 경로 이름이 입력된 상황을 처리합니다(터치 실패할 것입니다. 그리고 파일이 이미 존재하는 경우 일반 파일인지 확인합니다.
우리가 볼 수 있듯이 write_html_page 함수는 페이지의 실제 생성을 수행하기 위해 호출됩니다. 출력은 표준 출력으로 전송됩니다(변수가 파일 이름 비어 있음) 또는 지정된 파일로 리디렉션됨.
문서