【问题标题】:Bash script multiple if express groupsBash 脚本多个 if express 组
【发布时间】:2020-04-29 13:36:01
【问题描述】:

我是 bash 脚本的新手,我正在尝试在 if 语句中对多个表达式进行分组

minuteRun = $1
if 
[
    [ [ $minuteRun -eq 25 ] &&  [ $HR != 01] && [ $HR != 13 ] ] || 
    [ [ $minuteRun -eq 50 ] && [ $HR -eq 01 || $HR -eq 13 ] ]
]   
 then

我称之为./script.sh 45

这里是错误

  • ./script.sh: 第 25 行: [: missing `]'
  • ./script.sh:第 26 行:[:太 许多论点
  • ./script.sh: line 27: [: too many arguments
  • ./script.sh: line 27: 12: command not found
  • ./script.sh:第 28 行:]: 找不到命令

【问题讨论】:

  • 别忘了命令[只是命令test的另一种拼写,所以你基本上写了if test test test $minuteRun -eq 25 ....等等,穿插换行符,这样就可以了更差。实际上,bash 已经在第一个 [ 处退出了,因为它在同一行上看不到终止 ]

标签: bash syntax


【解决方案1】:

有语法错误,尤其是。括号之间的空格,例如[ [

最好在 bash 中使用 (( ...)) 来使用算术上下文:

#!/usr/bin/env bash

minuteRun=$1

if 
((
    ( minuteRun == 25 && HR != 1 && HR != 13 )
    || 
    ( minuteRun == 50 && ( HR == 1 || HR == 13 ) )
))   
 then

【讨论】:

    【解决方案2】:

    我个人会为此使用case

    minuteRun=50 HR=01
    case $minuteRun:$HR in
         50:01|50:13) echo ok;;
          *:01|*:13 ) echo fail;;
    esac
    

    【讨论】:

      猜你喜欢
      • 2016-08-24
      • 2018-02-03
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      • 2021-11-04
      • 2014-05-26
      • 2019-08-15
      • 1970-01-01
      相关资源
      最近更新 更多