天天看點

探讨shell中EOF的用法

在shell程式設計中,遇大段文本或代碼時,經常會用到eof。本文就介紹下其用法,供初學的朋友參考。

在shell腳本中,通常将EOF與 << 結合使用,表示後續的輸入作為子指令或子Shell的輸入,直到遇到EOF為止,再傳回到主Shell。

EOF隻是一個分界符,當然也可以用abcde替換。

當shell遇到<<時,它知道下一個詞是一個分界符。在該分界符以後的内容都被當作輸入,直到shell又看到該分界符(位于單獨的一行)。

此分界符可以是所定義的任何字元串,其實,不一定要用EOF,隻要是“内容段”中沒有出現的字元串,都可以用來替代EOF,完全可以換成abcde之類的字元串,隻是一個起始和結束的标志罷了。

1,command<<EOF

(内容)

EOF

例如:

#!/bin/bash
#Filename:do.sh
su - oracle -c "
export ORACLE_SID=orcl
sqlplus /nolog <<EOF
connect / as sysdba
startup;
exit;
EOF"
sleep 5
su - oracle -c
lsnrctl start
           

說明:

将“内容段”整個作為指令的輸入。

用su指令讀取整段指令,并逐行執行。

2,特殊用法:

: << COMMENTBLOCK

   shell腳本代碼段

COMMENTBLOCK

用來注釋整段腳本代碼。 : 是shell中的空語句。

echo start
:<<COMMENTBLOCK
echo
echo "this is a test"
echo
COMMENTBLOCK
echo end
           

這段腳本執行時,中間部分不會被執行:

代碼示例:
[[email protected] shell]# sh eof.sh
start
end