셸 스 크 립 트 는 셸 스 크 립 트 의 실행 절차 와 변 수 를 감시 하 는 값 을 실현 합 니 다.

많은 경우 에 우 리 는 셸 프로그램 을 써 서 바퀴 를 반복 하지 않 아 도 되 는 시간 을 완성 합 니 다.그러나 셸 구문 에 도 함수 가 있 고 변수 가 있 기 때문에 실행 후에 어떤 관련 작업 을 실 행 했 는 지 구체 적 인 실행 과정 에서 의 변수 등 가 변 적 인 요소 에 대한 감 시 를 해 야 합 니 다.그러면 우 리 는 작은 셸 예 를 써 야 합 니 다.실행 과정 에서 조건문 의 변수 변화 에 대한 모니터링 과 전체 프로그램의 실행 절차 에 대한 관찰 을 완성 합 니 다.
셸 프로그램 코드:

#!/bin/bash
function setlogfile
{
    if ! [ -z "$1" ]; then
        echo "logfilename is not empty!" >> kthh
        exec 2>> $1
        exec 1>> $1
    fi   
}

num1=$1
logfile=$2
execlogfile=$3

setlogfile ${execlogfile}
set -x
if [ $num1 -eq 0 ]; then
    echo "num1 is 0">> ${logfile}
elif [ $num1 -ge 0 ]; then
    echo "num1 is grate 0">> ${logfile}
else
    echo "num1 is less 0">> ${logfile}
fi
/sbin/shutdown -k 10
if [ $num1 -eq 0 ]; then
    echo "num1 is 0 again">> ${logfile}
fi

명령 행 에서 실행:

[root@UFO shellprogram]# ./testexecutelog.sh 0 msglog execlog
위의 셸 스 크 립 트 프로그램 에서 num 1 에 대응 하 는 값 은 명령 행 의 0 입 니 다.  logfile 의 값 은 msglog 입 니 다.  execlogfile 의 값 은 execlog 입 니 다.
함수 setlogfile 의 사용 은 setlogfile 로그 파일 이름 입 니 다.예 를 들 어 setlogfile${execlogfile},함수 중의 exec 2>>$1 을 사용 합 니 다.exec 1>>$1 은 표준 출력 과 표준 오류 출력 정 보 를 execlog 파일 로 재 설정 하 는 것 을 표시 합 니 다.
다음은 execlogfile 의 내용 을 살 펴 보면 셸 프로그램의 실행 절차 와 실행 과정 에서 변수의 값 변 화 를 볼 수 있 습 니 다.

[root@UFO shellprogram]# cat execlog
+ '[' 0 -eq 0 ']'
+ echo 'num1 is 0'
+ /sbin/shutdown -k 10
+ '[' 0 -eq 0 ']'
+ echo 'num1 is 0 again'
이 를 통 해 알 수 있 듯 이 프로그램의 절 차 는.../testexecutelog.sh 후의 첫 번 째 매개 변수 와 결 정 됩 니 다.첫 번 째 매개 변 수 를 0 보다 크 거나 0 보다 작은 값 으로 바 꾸 어 테스트 할 수도 있다.
그 중에서 가장 중요 한 문장 은 set-x 입 니 다.이 문장의 의 미 는 간단 한 명령 이 확 장 된 후에 PS4 확장 치 를 표시 하고 그 다음 에 실행 할 명령 입 니 다.이 문장 을 실행 하지 않 으 면 실행 중인 변수의 실제 값 을 execlog 에 인쇄 하지 않 습 니 다.set 에 대한 사용 은 man set 에서 더 많이 알 수 있 습 니 다.
메모:exec 가 파일 설명 자 를 조작 할 때 도 이때 만 exec 는 현재 셸 환경 을 덮어 쓰 지 않 습 니 다.새로운 프로 세 스 를 시작 하지 않 는 다 는 것 이다.

좋은 웹페이지 즐겨찾기