如何在 Linux 脚本中编写条件赋值?

如何在 Linux 脚本中编写条件赋值?

我需要在 Linux shell 脚本中创建一个公式。如果这是 DOS,我(可能)没问题,但我已经做了更改,需要学习....!

D1 = 40500 至 49500 之间的 5 位数字(这是来自机场 SYNOP 报告的气压数据)

D2 = D1 的最后四位数字(我可以这样做)

D3 = D2 的第一位数字(我也可以这样做)

D4 将是 D2 除以 10,仅当 D3=0 时才会加上 1000。

我正在寻找类似的东西:如果 D3=0,则 D4=((D2/10)+1000),否则 D4=(D2/10)

谢谢,奈杰尔。

答案1

您基本上已经理解了,只存在一些小的语法问题。

用伪代码来说,你所得到的基本上是这样的:

if d3 equals 0 then
    set d4 equal to ((d2/10)+1000)
else
    set d4 equal to (d2/10)
end if

在 bash 中(这是在 Linux 中最有可能使用的 shell 脚本):

if test "$d3" -eq "0"; then
    d4=$(( ( $d2 / 10 ) + 1000 ))
else
    d4=$(( $d2 / 10 ))
fi

您需要来fi结束if语句,并且$(( ... ))是 bash 中的算术扩展。请注意,这$( ... )是完全不同的;那是流程替代它获取给定命令的输出并返回它。非常有用,但不是真正你想要的。

以上假设$d2$d3$d4已设置为正确值,并且没有设置具有冲突名称的环境变量。

如果你知道的话事实上永远不会$d3包含任何数字,您可以取消参数中的引号test,但我喜欢将其保留为安全网。要了解有关(在 bash 中)可以做什么的更多信息,请test查看man bashShell 内建命令标题。其他贝壳可能使用外部命令,在这种情况下适用(如果您出于某种原因愿意,man test您可以在 bash 中使用外部命令,例如通过)。if command test ...; then

前面的分号then是必需的,因为then在 bash 中它实际上是一个单独的命令;您也可以将其放在then单独的行中并省略分号,这是格式化完全相同内容的另一种方式。

相关内容