如何将字符串中的数字添加到数字?

时间:2017-07-31 19:39:41

标签: bash

我正在尝试编写一个获取实际亮度的脚本,并将字符串数减少0.1。我已经尝试了很多语法,但由于我对bash很新,所以这不起作用。

#!/bin/sh

actualBrightness=$(xrandr --verbose | grep -i brightness | cut -f2 -d ' ')

echo ${actualBrightness} # 0.5 for ex

if [[ $actualBrightness < 1 ]]
  then
  newBrightness=$(($actualBrightness-0.1))
  echo $newBrightness # must be 0.4
fi

2 个答案:

答案 0 :(得分:0)

假设你有:

$ echo "$b"
0.5

0.5仅对Bash作为字符串有意义。您需要使用bcawk将其解释为浮点值更改或更改其值:

$ echo "$b-.1" | bc
.4

Bash不做浮点数学 - 只有整数数学和字符串操作。

所以要更改b的价值:

$ b=$(echo "$b-.1" | bc)
$ echo "$b"
.4

您还可以使用bc进行测试:

$ echo "0.55 > 7" | bc
0
$ echo "55.2 > 7" | bc
1

1为'true',然后在你的Bash [[ test ]]中使用它,如下所示:

[[ $(echo "5 > 1" | bc) -eq 1 ]] # sets $? to 0 for true or 1 for false
                                 # BACKWARDS from bc's exit code

或者,单一陈述:

$ [[ $(echo "5 > 1" | bc) -eq "1" ]] && echo "true" || echo "false"
true
$ [[ $(echo ".5 > 1" | bc) -eq "1" ]] && echo "true" || echo "false"
false

答案 1 :(得分:0)

您可以使用awk来促进浮点运算:

actualBrightness='0.5'
awk '{if ($1 < 1) { new=($1 - 0.1); printf new; }}' <<<"$actualBrightness"
# output: 0.4

说明:

Awk对由field-separator分隔的字段进行操作,默认为空格;以上陈述检查:

  1. 第一个字段是否小于1
  2. 是?然后将变量new设置为($1 - 0.1)并将new打印到STDOUT
  3. 否?然后什么都不做。