![서버에서 동일한 스크립트로 오류가 발생합니다.](https://linux55.com/image/145339/%EC%84%9C%EB%B2%84%EC%97%90%EC%84%9C%20%EB%8F%99%EC%9D%BC%ED%95%9C%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A1%9C%20%EC%98%A4%EB%A5%98%EA%B0%80%20%EB%B0%9C%EC%83%9D%ED%95%A9%EB%8B%88%EB%8B%A4..png)
약 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
내가 사용하고 본 Icarus 의견에 따르면 이는 ^M
명령의 일부로 간주됩니다. 이 게시물에서는 다음 솔루션을 사용하여 제거했습니다.
https://stackoverflow.com/questions/800030/remove-carriage-return-in-unix
OSscript가 아닌 테스트 스크립트에서 작업합니다. 결국 나는 내 파일이 손상되었음을 발견했습니다. OSscript를 삭제했다가 다시 만들고 스크립트를 추가했습니다. 효율적인.