我想引用这个问题到下面的post,我得到Skript: Post with Script
我正在使用Bash 4.1.2(1),当我尝试执行脚本时,出现以下错误消息:
./check_disk_by_size.sh: Zeile 9: [: ==: Einstelliger (unärer) Operator erwartet. (standard_in) 1: syntax error ./check_disk_by_size.sh: Zeile 13: [: -eq: Einstelliger (unärer) Operator erwartet. (standard_in) 1: syntax error (standard_in) 1: syntax error ./check_disk_by_size.sh: Zeile 16: [: Zu viele Argumente. (standard_in) 1: syntax error ./check_disk_by_size.sh: Zeile 19: [: -eq: Einstelliger (unärer) Operator erwartet.
我有基本的Bash脚本经验,但每当我改变的东西,我得到更多的错误。 我无法启动它的工作。
编辑1:这是脚本
#!/bin/bash FREESPACE=`/usr/local/nagios/libexec/check_nt -H $2 -p 12489 -s PASSWORD \ -v USEDDISKSPACE -l $4 | awk -F"- " '{ print $4 }' | awk -F "|" '{ print $1 }'` SIZE=`echo $FREESPACE | awk '{ print $2 }'` UNIT=`echo $FREESPACE | awk '{ print $3 }'` if [ $UNIT == "Gb" ]; then SIZE=`echo $SIZE \* 1024 | bc` fi if [ `echo "$SIZE >= $6" | bc` -eq 1 ]; then echo "$4:\_Drive_Space OK - $FREESPACE" exit 0 elif [ `echo "$SIZE < $6" | bc` -eq 1 -a `echo "$SIZE > $8" | bc` -eq 1 ]; then echo "$4:\_Drive_Space WARNING - $FREESPACE" exit 1 elif [ `echo "$SIZE <= $8" | bc` -eq 1 ]; then echo "$4:\_Drive_Space CRITICAL - $FREESPACE" exit 2 fi
我运行这样的脚本:
./check_disk_by_size -H [IP_Adress] -l [DRIVE] -w [INTEGER] -c [INTEGER] -p [PORT] -s [PASSWORD]
例:
./check_disk_by_size -H 192.168.1.110 -lc -w 10240 -c 8192 -p 12489 -s PASSWORD
UPDATE
谢谢你的帮助! 它现在工作:)现在脚本看起来像这样:
#!/bin/bash # FREESPACE=`/usr/local/nagios/libexec/check_nt -H $2 -p 12489 -s Nag4AlphA \ -v USEDDISKSPACE -l $4 | awk -F"- " '{ print $4 }' | awk -F "|" '{ print $1 }'` SIZE=`echo $FREESPACE | awk '{ print $2 }'` UNIT=`echo $FREESPACE | awk '{ print $3 }'` if [ "$UNIT" == "Gb" ]; then SIZE="$(echo "$(($SIZE * 1024))" | bc)" fi echo $SIZE echo " " echo $6 echo " " echo $8 if [ $SIZE -ge $6 ]; then echo "$4:\_Drive_Space OK - $FREESPACE" exit 0 elif [ $SIZE -lt $6 -a $SIZE -gt $8 ]; then echo "$4:\_Drive_Space WARNING - $FREESPACE" exit 1 elif [ $SIZE -lt $8 ]; then echo "$4:\_Drive_Space CRITICAL - $FREESPACE" exit 2 fi
对我来说,它看起来像“如果testing”中的左操作数是空的。
关于为什么可能有一个空值,我build议你从shell运行Nagios命令,看看它有什么作用。 它的输出是什么? 运行所有步骤到输出:
/usr/local/nagios/libexec/check_nt -H $2 -p 12489 -s PASSWORD -v USEDDISKSPACE -l $4
/usr/local/nagios/libexec/check_nt -H $2 -p 12489 -s PASSWORD -v USEDDISKSPACE -l $4 | awk -F"- " '{ print $4 }'
/usr/local/nagios/libexec/check_nt -H $2 -p 12489 -s PASSWORD -v USEDDISKSPACE -l $4 | awk -F"- " '{ print $4 }' | awk -F "|" '{ print $1 }'
关于脚本本身,我“善意地build议”:
$()而不是反引号扩展, 无处不在 当然,很less有例外,例如当您testing数字值时。
我不是故意粗鲁,只要确保你明白这是多么重要:)
一部开拓创新:
if [ $UNIT == "Gb" ]; then SIZE=`echo $SIZE \* 1024 | bc` fi
淬火:
if [ "$UNIT" == "Gb" ]; then SIZE="$(echo "$SIZE * 1024" | bc)" fi
在我开始一贯遵循这些规则之后,我从来没有遇到任何问题。
这是一篇关于Bash脚本最佳实践的好文章: http : //www.davidpashley.com/articles/writing-robust-shell-scripts/ ,还有一篇关于shell扩展的文章http://mywiki.wooledge.org/BashFAQ/082
UDPATE:纠正了一些错别字