Eu tenho esse script em cerca de 20 servidores.
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
quando executo este comando:
/opt/zabbix_agent/share/scripts/OSscript "netface"
ele retorna:
0
acabei de adicionar este script a um novo servidor e quando executo o comando acima, recebo isso:
: 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
por que eu recebo esse erro? O SO é o CentOS 6.9
bem de acordo com o comentário de icarus que usei
cat -v
e vi que^M
são considerados como parte do comando. Eu usei essas soluções neste post para removê-los:https://stackoverflow.com/questions/800030/remove-carriage-return-in-unix
eles funcionaram em um script de teste não no OSscript. finalmente descobri que meus arquivos estão corrompidos. Eu removi o OSscript e o criei novamente e adicionei meu script. funcionou.