1. 程式人生 > 其它 >warning: here-document at line 22 delimited by end-of-file (wanted `EOF')

warning: here-document at line 22 delimited by end-of-file (wanted `EOF')

記錄一個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
轉載請註明出處