如何将两个字符串变量与两个字符串进行比较,并将它们组合在 IF 条件语句中的 AND 逻辑运算符中
How compare two string variables to two string and combine them in AND logic operator in IF conditional statement
是的,我不敢相信我正在写这篇文章,但似乎我无法将一个变量与一个字符串进行比较,然后将第二个变量与另一个字符串进行比较,并将它们组合在 IF 语句的 AND (&&) 子句中以获得bash 脚本。
我正在尝试在 Linux Mint 20,GNU bash 版本 5.0.16 上执行此操作。在代码中,您会看到我尝试过的所有替代语句,其中 none 行得通。
脚本需要 ping 我的互联网连接两次,如果在这两种情况下都 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 '=="received," {print }' ~/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 行,有一个语句 {marked with extra comment} 没有给出错误,但是当条件为真时它什么也不做,即它也不是正确的语句。
使用bash重赛:
re='\+8'
[[ "$lossPerc" =~ $re ]] && [[ "$prevLostPerc" =~ $re ]]
甚至像这样:
re='\+8.*\+8'
[[ "$lossPerc$prevLostPerc" =~ $re ]]
如果case
也是一个选项:
case "$lossPerc$prevLostPerc" in
*'+8'*'+8'*) echo ok;;
esac
是的,我不敢相信我正在写这篇文章,但似乎我无法将一个变量与一个字符串进行比较,然后将第二个变量与另一个字符串进行比较,并将它们组合在 IF 语句的 AND (&&) 子句中以获得bash 脚本。
我正在尝试在 Linux Mint 20,GNU bash 版本 5.0.16 上执行此操作。在代码中,您会看到我尝试过的所有替代语句,其中 none 行得通。
脚本需要 ping 我的互联网连接两次,如果在这两种情况下都 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 '=="received," {print }' ~/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 行,有一个语句 {marked with extra comment} 没有给出错误,但是当条件为真时它什么也不做,即它也不是正确的语句。
使用bash重赛:
re='\+8'
[[ "$lossPerc" =~ $re ]] && [[ "$prevLostPerc" =~ $re ]]
甚至像这样:
re='\+8.*\+8'
[[ "$lossPerc$prevLostPerc" =~ $re ]]
如果case
也是一个选项:
case "$lossPerc$prevLostPerc" in
*'+8'*'+8'*) echo ok;;
esac