Bash
伺服器上的相同腳本出錯
我在大約 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
被視為命令的一部分。我在這篇文章中使用了這些解決方案來刪除它們://stackoverflow.com/questions/800030/remove-carriage-return-in-unix 他們確實在一個測試腳本上工作,而不是在 OSscript 上。最後我發現我的文件已損壞。我刪除了 OSscript 並再次創建它並添加了我的腳本。有效。