我正在尝试创建一个脚本,当它等于1时,它会比较/ results文件的输出。
#!/bin/sh
RESULTS=/results
$
while true
do
ping -c 5 1.1.1.1 > /dev/null && echo "1" > /results || echo "0" > /results
if
[ $RESULTS = "1" ];
then
echo "working"
sleep 5
else
echo "not working"
sleep 5
fi
done
答案 0 :(得分:3)
你不应该在/results
中写任何东西。如果可以,您应该避免以用户root
运行任何内容,如果您不是用户root
,则不应该在根目录中乱涂乱画。
你正试图测试ping
是否(非常)努力。使用:
while true
do
if ping -c 5 1.1.1.1 > /dev/null
then echo "working"
else echo "not working"
fi
sleep 5
done
您可能也希望为邮件添加时间戳;它比计数更容易。因此:
while true
do
if ping -c 5 1.1.1.1 > /dev/null
then date "+%Y-%m-%d %H:%M:%S - working"
else date "+%Y-%m-%d %H:%M:%S - not working"
fi
sleep 5
done
请注意,此技术可避免临时文件,因此无需清理任何内容。这是更好的脚本技术。尽可能避免使用临时文件。如果无法避免临时文件,请确保清理它们。
不要忘记始终使用$RESULTS
。我还将文件重新定位到“更好”的位置,并合理地确定它将被清理。如果root
的主目录为/
(传统值)而不是/home/root
或类似内容,请考虑使用其他“更好”的位置,例如/tmp/root/results.$$
(创建首先是/tmp/root
目录:mkdir -p /tmp/root
)。
您需要将$RESULTS
的内容与字符串进行比较,而不是将$RESULTS
的名称与0
或1
(始终不相等)进行比较。
此脚本使用特定于Bash的表示法($(<file)
表示法读取文件):
RESULTS=$HOME/results.$$
trap "rm -f $RESULTS; exit 1" 0 1 2 3 13 15
while true
do
ping -c 5 1.1.1.1 > /dev/null && echo "1" > $RESULTS || echo "0" > $RESULTS
if [ $(<$RESULTS) = "1" ];
then echo "working"
else echo "not working"
fi
sleep 5
done
rm -f $RESULTS
trap 0
或(不限于Bash):
RESULTS=$HOME/results.$$
trap "rm -f $RESULTS; exit 1" 0 1 2 3 13 15
while true
do
ping -c 5 1.1.1.1 > /dev/null && echo "1" > $RESULTS || echo "0" > $RESULTS
if [ $(cat $RESULTS) = "1" ];
then echo "working"
else echo "not working"
fi
sleep 5
done
rm -f $RESULTS
trap 0
(我注意到循环不会退出,除非被中断,所以这里的循环后清理是多余的,但是你应该使用它来清理临时文件。)
答案 1 :(得分:0)
由于您需要阅读其名称包含在变量RESULTS
中的文件的内容,因此表达式
[ $RESULTS = "1" ]
必须更改为
[ $(cat $RESULTS) = "1" ]
答案 2 :(得分:0)
您的变量RESULTS
始终保留/results
,因此[ $RESULTS = "1" ]
失败,因为RESULTS
永远不会"1"
。您需要将RESULTS
中存储路径的文件的内容与"1"
进行比较;即使用$(cat $RESULTS) = "1"
。
答案 3 :(得分:0)
其他的回答者提出了很好的脚本替代方案,但我认为完成您要做的事情的最简单方法是使用watch,它安装在大多数(所有?)Linux发行版上。你可以这样做:
watch 'ping -c 5 2>&1 >/dev/null && echo "success" || echo "failure"'
Jonathan Leffler的解决方案也非常好,但是如果您需要重用命令的退出代码,$?
变量始终包含上一个命令的退出代码。您可以将其存储到另一个变量并保存以供日后使用。