gpt4 book ai didi

linux - 将 cat 输出作为变量进行比较

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:57 26 4
gpt4 key购买 nike

我正在尝试制作一个脚本,当它等于 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

最佳答案

安全问题

你不应该在 /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 的名称与 01 (这将永远是不平等的)。

此脚本使用特定于 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

(我注意到除非中断,否则循环不会退出,因此循环后清理在这里是多余的,但通常您应该使用它来清理临时文件。)

关于linux - 将 cat 输出作为变量进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23974895/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com