服务器上的相同脚本出现错误

服务器上的相同脚本出现错误

我在大约 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

答案1

好吧,根据我使用cat -v和看到的伊卡洛斯评论,它^M被视为命令的一部分。我在这篇文章中使用了这些解决方案来删除它们:
https://stackoverflow.com/questions/800030/remove-carriage-return-in-unix
他们确实在测试脚本上工作,而不是在 OSscript 上。最后我发现我的文件已损坏。我删除了 OSscript 并再次创建它并添加了我的脚本。有效。

相关内容