if语句和shell脚本

时间:2016-12-22 00:59:17

标签: bash if-statement boolean

我正在尝试创建一个if语句,如果小时在13到23之间,它会将小时设置为12.现在,下面是我的shell脚本代码的片段:

#!/bin/bash

HOUR=$1
if [ $HOUR > 13 ] && [ $HOUR < 23 ];
then
      $HOUR=12
fi

现在我在运行此脚本时遇到错误。如何调整此脚本以获得上面指定的所需条件?

4 个答案:

答案 0 :(得分:1)

if [ $HOUR -gt 13 -a $HOUR -lt 23 ]
then
    HOUR=12
fi
  • 使用-gt和-lt代替&gt; &LT; (重定向操作)
  • 在同一表达式中使用-a表示AND
  • 修正拼写错误$HOURS=12(已移除$)

答案 1 :(得分:0)

您需要以算术方式而不是文本方式来评估该表达式。尝试这样的事情:

#!/bin/bash

HOUR=$1
if (( $HOUR > 13 )) && (( $HOUR < 23 ));
then
      HOUR=12
fi

答案 2 :(得分:0)

要在Bash测试中使用<>,您需要[[...]]形式的测试构造。但是,这并不符合您的想法。那些是词典测试。

您可以使用-lt-gt进行算术比较:

$ H=14
$ [[ $H -gt 13 && $H -lt 23 ]]; echo $?
0

0在这种情况下表示为真......)

或者,使用((...))进行算术测试构造。然后,您可以使用C风格的三元分配来一步测试和分配:

$ H=20
$ (( H = H>13 && H<23 ? 12 : H )); echo $H
12

答案 3 :(得分:0)

更短的版本:

#!/bin/bash
HOUR=$1
[[ $HOUR > 13 && $HOUR < 23 ]] && HOUR=12