Bash

伺服器上的相同腳本出錯

  • January 1, 2019

我在大約 20 台伺服器上有這個腳本。

CASE=$1

case $CASE in
"multipath")
   status=$(service multipathd status | awk '{gsub(/[.]/,"");print $NF}')
       if [ $status = 'running' ]; then
       echo 0
       else
       echo 1
       fi
 ;;
"hbaport")
       output=0
   port_array=($(cat /sys/class/fc_host/*/port_state))
       for port in ${port_array[@]}
   do
           if [ $port != 'Online' ]; then
       output=1
           fi
       done
           echo $output
 ;;
"netface")
 inter=0
     ifconfig=$(ifconfig)
     interface_array=($(ls -l /etc/sysconfig/network-scripts/ifcfg-* | awk -F '-' '{print $NF}' | grep -iv 'lo'))
     for interface in ${interface_array[@]}
 do
 if [[ $ifconfig == *"$interface"* ]]; then
 operstate=$(cat /sys/class/net/$interface/operstate)
          if [ $operstate != 'up' ]; then
              inter=1
              fi
 fi
     done
     echo $inter
 ;;
esac

當我執行這個命令時:

/opt/zabbix_agent/share/scripts/OSscript "netface"

它返回:

0

我剛剛將此腳本添加到一個新伺服器,當我執行上面的命令時,我得到這個:

: command not foundhare/scripts/OSscript: line 2:
'opt/zabbix_agent/share/scripts/OSscript: line 3: syntax error near 
unexpected token `in
'opt/zabbix_agent/share/scripts/OSscript: line 3: case $CASE in  

為什麼我得到這個錯誤?作業系統為 CentOS 6.9

好吧,根據我使用cat -v並看到的icarus評論,這^M被視為命令的一部分。我在這篇文章中使用了這些解決方案來刪除它們:

https

//stackoverflow.com/questions/800030/remove-carriage-return-in-unix 他們確實在一個測試腳本上工作,而不是在 OSscript 上。最後我發現我的文件已損壞。我刪除了 OSscript 並再次創建它並添加了我的腳本。有效。

引用自:https://unix.stackexchange.com/questions/491564