我需要在 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 bash
Shell 内建命令标题。其他贝壳可能使用外部命令,在这种情况下适用(如果您出于某种原因愿意,man test
您可以在 bash 中使用外部命令,例如通过)。if command test ...; then
前面的分号then
是必需的,因为then
在 bash 中它实际上是一个单独的命令;您也可以将其放在then
单独的行中并省略分号,这是格式化完全相同内容的另一种方式。