記錄一個bash腳本中使用EOF遇到的問題
下面是我最初的代碼
#!/bin/bash
#Author: wangml
#Created Time:
#Script Description: 監控一個服務端口
# 監控方法
# 通過查看systemct1 service 服務啟動狀態
# lsof 查看端口是否存在
# 查看進程是否存在
####上述方式會出現問題:壓力過大無法相應 或者 服務down了,但上述東西還在
# 測試端口是否有響應 推薦
port_status () {
# 創建一個臨時文件
temp_file=`mktemp port_status.XXX`
# 判斷依賴命令telnet是否存在
[ ! -x /usr/bin/telnet ] && echo "telnet: not found command" && exit 1
# 測試端口 $1 IP $2 port
( telnet $1 $2 <<EOF
quit
EOF
) &>$temp_file
if egrep "\^]" $temp_file &>/dev/null;then
echo "$1 $2 is open"
else
echo "$1 $2 is down"
fi
rm -f $temp_file
}
port_status $1 $2
在執行過程中會出現標題所示的warning
(base) [root@CentOS-wangml shell]# bash -x ex2.sh 192.168.1.225 22
ex2.sh: line 38: warning: here-document at line 22 delimited by end-of-file (wanted `EOF')
ex2.sh: line 39: syntax error: unexpected end of file
解決方式
刪除EOF前面所有的空格、制表符
修改后代碼如下
#!/bin/bash
#Author: wangml
#Created Time:
#Script Description: 監控一個服務端口
# 監控方法
# 通過查看systemct1 service 服務啟動狀態
# lsof 查看端口是否存在
# 查看進程是否存在
####上述方式會出現問題:壓力過大無法相應 或者 服務down了,但上述東西還在
# 測試端口是否有響應 推薦
port_status () {
# 創建一個臨時文件
temp_file=`mktemp port_status.XXX`
# 判斷依賴命令telnet是否存在
[ ! -x /usr/bin/telnet ] && echo "telnet: not found command" && exit 1
# 測試端口 $1 IP $2 port
( telnet $1 $2 <<EOF
quit
EOF
) &>$temp_file
if egrep "\^]" $temp_file &>/dev/null;then
echo "$1 $2 is open"
else
echo "$1 $2 is down"
fi
rm -f $temp_file
}
port_status $1 $2