在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
#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
:<<COMMENTBLOCK
echo
echo "this is a test"
echo
COMMENTBLOCK
echo end
這段腳本執行時,中間部分不會被執行:
代碼示例:
[root@newserver shell]# sh eof.sh
start
end
start
end