shell条件判断的简化用法

条件判断的简化用法
一些条件判断可以参考这里: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"==0addfqcodelSFQ” == 2, S F Q " = = 3 这 种 情 况 , 在 这 种 情 况 下 , ‘ a d d f q c o d e l ‘ 也 会 运 行 。 所 以 , 使 用 ‘ [ " SFQ" == 3这种情况,在这种情况下,`add_fq_codel`也会运行。所以,使用` [ " SFQ"==3addfqcodel使["SFQ" == 1 ] && add_SFQ ; [ “$SFQ” == 0 ] && add_fq_codel`
两条命令可以稳稳妥妥避免任何问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值