歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix基礎知識 >> AIX上運行KSH腳本時的Here Documents相關的低級錯誤

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

日期:2017/3/3 15:23:35   编辑:Unix基礎知識

今天編寫一個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