条件判断的简化用法
一些条件判断可以参考这里:https://blog.csdn.net/wxc_qlu/article/details/82826106
最基本的条件判断用法:
条件=打电话给MM
if [ $条件 == "成功通话" ]; then
echo "约她"
fi
这是入门级用法。
还可以这样:
条件=`打电话给MM` ; [ $条件 == "成功通话" ] && echo "约她"
这是中级用法,其中“;”表示前后两条命令只是有先后关系,无条依存关系。“&&”表示后一条命令依存前一条命令的判断结果(成功)执行。
还可以进一步简化这样用:
打电话给MM && echo "约她"
这就更简单明了了。“&&”表示前一命令成功执行就执行后面的命令,如果前一命令执行不成功,就在前一命令执行后终止。但是需要很明确的条件依存关系才可以用(这命令问题在于,打通电话就要约她,无论她接通就挂还是骂娘,都无法具体判断)。
入门用法基本上不会出问题,踏踏实实使用基本用法可以减少很多基本语法错误。但是复杂的脚本比如有N重判断,这样写起来却很麻烦,一个fi放错位置就都废了,乱起来隔一夜连自己都理不清写的是什么鬼。
下面是这种简化的用法例子:
if [ ! "$HTB" == 2 ] && [ "$qos_download" == 1 ]; then
IFACE="$LAN"
RATE="$DL"
PORT="sport"
[ "$HTB" == 1 ] && add_HTB
[ "$HTB" == 0 ] && add_HFCS
[ "$SFQ" == 1 ] && add_SFQ || add_fq_codel
add_filter_u32
[ "$U32" == 1 ] || add_filter_ipt
fi
很明显,什么条件执行什么命令,自己一眼就清楚,一个大条件 if [ ! “KaTeX parse error: Expected 'EOF', got '&' at position 13: HTB" == 2 ] &̲& [ "qos_download” == 1 ]; then中间又有很多条件判断,甚至条件判断中间又有条件判断。
需要注意,[ “KaTeX parse error: Expected 'EOF', got '&' at position 13: SFQ" == 1 ] &̲& add_SFQ || ad…SFQ” == 1 ]成立,就执行后面的add_SFQ,否则就执行add_fq_codel。但实际上不是我们想要的这样,实际上是[ “KaTeX parse error: Expected 'EOF', got '&' at position 13: SFQ" == 1 ] &̲& add_SFQ是一个整体,…HTB” == 1 ] && add_HTB || add_HFCS 的原因:
[ "$HTB" == 1 ] && add_HTB
[ "$HTB" == 0 ] && add_HFCS
&&和||都是表示运行条件建立在前一条命令基础上的,而不是第一条。
所以 [ "$SFQ" == 1 ] && add_SFQ || add_fq_codel
这样用不是稳妥的,而是要用:
[ "$SFQ" == 1 ] && add_SFQ
[ "$SFQ" == 0 ] && add_fq_codel
这里引申出一个问题:
[ “KaTeX parse error: Expected 'EOF', got '&' at position 13: SFQ" == 1 ] &̲& add_SFQ || ad…SFQ” == 1就运行add_SFQ,“
S
F
Q
"
=
=
0
运
行
a
d
d
f
q
c
o
d
e
l
,
但
实
际
上
有
时
候
有
SFQ" == 0运行add_fq_codel,但实际上有时候有
SFQ"==0运行addfqcodel,但实际上有时候有SFQ” == 2,
S
F
Q
"
=
=
3
这
种
情
况
,
在
这
种
情
况
下
,
‘
a
d
d
f
q
c
o
d
e
l
‘
也
会
运
行
。
所
以
,
使
用
‘
[
"
SFQ" == 3这种情况,在这种情况下,`add_fq_codel`也会运行。所以,使用` [ "
SFQ"==3这种情况,在这种情况下,‘addfqcodel‘也会运行。所以,使用‘["SFQ" == 1 ] && add_SFQ ; [ “$SFQ” == 0 ] && add_fq_codel`
两条命令可以稳稳妥妥避免任何问题。