我正在尝试编写一个获取实际亮度的脚本,并将字符串数减少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
答案 0 :(得分:0)
假设你有:
$ echo "$b"
0.5
0.5
仅对Bash作为字符串有意义。您需要使用bc
或awk
将其解释为浮点值更改或更改其值:
$ 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分隔的字段进行操作,默认为空格;以上陈述检查:
new
设置为($1 - 0.1)
并将new
打印到STDOUT