Sim*_*_me 147 bash flags if-statement
我正在尝试编写一个将检查两个错误标志的脚本,并且如果一个标志(或两者)被更改,它将回显 - 发生错误.我的剧本:
my_error_flag=0
my_error_flag_o=0
do something.....
if [[ "$my_error_flag"=="1" || "$my_error_flag_o"=="2" ] || [ "$my_error_flag"="1" && "$my_error_flag_o"="2" ]]; then
echo "$my_error_flag"
else
echo "no flag"
fi
Run Code Online (Sandbox Code Playgroud)
基本上,它应该是,以下内容:
if ((a=1 or b=2) or (a=1 and b=2))
then
display error
else
no error
fi
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
line 26: conditional binary operator expected
line 26: syntax error near `]'
line 26: `if [[ "$my_error_flag"=="1" || "$my_error_flag_o"=="2" ] || [ "$my_error_flag"="1" && "$my_error_flag_o"="2" ]]; then'
Run Code Online (Sandbox Code Playgroud)
我的括号搞砸了吗?
mkh*_*tib 217
使用-a(for和)和-o(for或)操作.
tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html
更新
其实你仍然可以使用&&,并||与-eq操作.所以你的脚本将是这样的:
my_error_flag=1
my_error_flag_o=1
if [ $my_error_flag -eq 1 ] || [ $my_error_flag_o -eq 2 ] || ([ $my_error_flag -eq 1 ] && [ $my_error_flag_o -eq 2 ]); then
echo "$my_error_flag"
else
echo "no flag"
fi
Run Code Online (Sandbox Code Playgroud)
虽然在你的情况下,你可以丢弃最后两个表达式,只需坚持一个或这样的操作:
my_error_flag=1
my_error_flag_o=1
if [ $my_error_flag -eq 1 ] || [ $my_error_flag_o -eq 2 ]; then
echo "$my_error_flag"
else
echo "no flag"
fi
Run Code Online (Sandbox Code Playgroud)
Fiz*_*han 59
您可以使用[[或((关键字.使用[[关键字时,必须使用字符串运算符,例如-eq,-lt.我想,((是最优选的算术,因为你可以直接使用运营商,如==,<和>.
使用[[运算符
a=$1
b=$2
if [[ a -eq 1 || b -eq 2 ]] || [[ a -eq 3 && b -eq 4 ]]
then
echo "Error"
else
echo "No Error"
fi
Run Code Online (Sandbox Code Playgroud)
使用((运算符
a=$1
b=$2
if (( a == 1 || b == 2 )) || (( a == 3 && b == 4 ))
then
echo "Error"
else
echo "No Error"
fi
Run Code Online (Sandbox Code Playgroud)
不要使用-a或-o运营商因为它不是便携式的.
小智 7
请尝试以下
if ([ $dateR -ge 234 ] && [ $dateR -lt 238 ]) || ([ $dateR -ge 834 ] && [ $dateR -lt 838 ]) || ([ $dateR -ge 1434 ] && [ $dateR -lt 1438 ]) || ([ $dateR -ge 2034 ] && [ $dateR -lt 2038 ]) ;
then
echo "WORKING"
else
echo "Out of range!"
Run Code Online (Sandbox Code Playgroud)