是的,我不敢相信我正在写这篇文章,但似乎我不能将一个变量与一个字符串进行比较,然后将第二个变量与另一个字符串进行比较,然后在IF语句的IF语句中将这些变量和(&&)子句组合成一个bash脚本。
我正试图在Linux Mint20,GNU bash版本5.0.16上做到这一点。在代码中,您将看到我尝试过的所有替代语句,但这些语句都不起作用。
该脚本需要ping我的Internet连接两次,如果在这两种情况下都有100%的数据包丢失,我需要启动一些bash命令{这里不包括}来重新连接连接。因此,这是一个无人值守重新连接互联网的脚本。
代码如下:
#!/bin/bash
# redirect *pint output to a text file
ping -q -c 8 8.8.8.8 > ~/bash/pingOut.txt
# get transfer loss percentage
lossPerc=$(awk '$5=="received," {print $6}' ~/bash/pingOut.txt)
echo "lossPerc is ${lossPerc}"
# read prev loss percentage
prevLossPerc=$(cat ~/bash/loss-perc.txt)
echo "prevLossPerc is ${prevLossPerc}"
# write latest loss percentage to file
echo "$lossPerc" > ~/bash/loss-perc.txt
#if [[ "$lossPerc" == '+8' ]] && [[ "$prevLostPerc" == '+8' ]] => NO
#if [ "$lossPerc" == '+8' ] && [ "$prevLostPerc" == '+8' ] => NO
#if [ "$lossPerc" = '+8' ] && [ "$prevLostPerc" = '+8' ] => no error but not working as expected ------- line 19 -----
#if [[ $lossPerc = '+8' ]] && [[ $prevLostPerc = '+8' ]] => NO
#if [[ $lossPerc = "+8" ]] && [[ $prevLostPerc = "+8" ]] => NO
#if [ $lossPerc = '+8' ] && [ $prevLostPerc = '+8' ] => NO
#if [ $lossPerc = "+8" ] && [ $prevLostPerc = "+8" ] => NO
#if [[ "$lossPerc" = '+8' && "$prevLostPerc" = '+8' ]] => NO
#if [[ "$lossPerc" == "+8" && "$prevLostPerc" == "+8" ]] => NO
#if [ "$lossPerc" = '+8' && "$prevLostPerc" = '+8' ] NO
then
echo "Now I need to do a number of things to reconnect my i-net connection!"
fi所以基本上我尝试了所有的注释*if语句,除了一个之外,所有的语句都会在shell中给出错误。这些错误通常类似于[: =: unexpected operator、[[: not found或[: missing。在第19行,有一个语句{用额外的注释标记},它没有给出错误,但当条件为真时,它什么也不做,即它也不是正确的语句。
发布于 2021-02-08 20:18:19
使用bash重新匹配:
re='\+8'
[[ "$lossPerc" =~ $re ]] && [[ "$prevLostPerc" =~ $re ]]或者甚至像这样:
re='\+8.*\+8'
[[ "$lossPerc$prevLostPerc" =~ $re ]]如果case也是一个选项:
case "$lossPerc$prevLostPerc" in
*'+8'*'+8'*) echo ok;;
esachttps://stackoverflow.com/questions/66101391
复制相似问题