歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> Unix基礎知識

AIX上運行KSH腳本時的Here Documents相關的低級錯誤

今天編寫一個AIX上的KSH腳本,功能是定期收集VMSTAT信息並且放入ORACLE數據庫,以供查詢分析,腳本如下:

  #!/usr/bin/ksh

export ORACLE_HOME=/home/oracle/database
export PATH=$ORACLE_HOME/bin:$PATH
SERVER_NAME=`uname -a|awk '{print $2}'
typeset -u SERVER_NAME
export SERVER_NAME

SAMPLE_TIME=300

while true
do
       vmstat ${SAMPLE_TIME} 2 > /tmp/msg$$
       cat /tmp/msg$$|sed 1,3d| awk '{ printf("%s %s %s %s %s %s %s\n", $1, $6, $7, $14 ,$15, $16, $17) }'
       while read RUNQUE PAGE_IN PAGE_OUT USER_CPU SYSTEM_CPU IDLE_CPU WAIT_CPU
       do
             $ORACLE_HOME/bin/sqlplus -s test/test@sid<<EOF
               insert into test.test$vmstat values (
                       sysdate,
                       $SAMPLE_TIME,
                       '$SERVER_NAME',
                       $RUNQUE,
                       $PAGE_IN,
                       $PAGE_OUT,
                       $USER_CPU,
                       $SYSTEM_CPU,
                       $IDLE_CPU,
                       0
                       );
               EXIT
               EOF
       done
done
rm /tmp/msg$$

結果悲劇就發生在上面最後一個“EOF”上,為了代碼格式,我把EOF前面也加了TAB,但是這卻是EOF所不允許的,出現了如下錯誤:

./get_vmstat.sh[13]: 0403-057 Syntax error at line 20 : `<' is not matched

EOF是代表Here Documents的結束。注意此處不能像寫C程序一樣,為了美觀而把EOF向右縮進,因為SHELL規定EOF必須是該行唯一出現的內容,連空格都不能有。因此,這個EOF就暫時突出在這一行了。(通過將輸入操作符改為“<<-”可以解決這個問題,但是這裡也無傷大雅)。

Copyright © Linux教程網 All Rights Reserved