我在树莓派上使用 bash 脚本时遇到问题:
x='gpio -g read 22'
if [ $x -ge 1 ]
then
gpio -g write 23 1
fi
错误是integer expression expected
。为什么?
答案1
那是因为您正在检查字符串是否gpio -g read 22
大于 1。由于gpio -g read 22
不是数字,因此您会收到该错误。
你没有解释你想要做什么,但我猜你想比较输出命令的gpio
。为此,您需要将命令括在$()
反引号 ( ``
) 中:
x=$(gpio -g read 22)
if [ "$x" -ge 1 ]
then
gpio -g write 23 1
fi
或者,更简单地说:
[ "$(gpio -g read 22)" -ge 1 ] && gpio -g write 23 1
作业foo='command'
不运行command
。该变量foo
取值细绳 command
而不是它的输出。
答案2
上面的答案在大多数情况下都有效,但采用以下脚本:
#!/bin/bash
a='foo: '
b='44494949494'
if [ ${a} -eq ${b} ]
then
echo "a matches b"
else
echo "a is different than b"
fi
它没有明确地回应上述选择之一,而是执行以下操作:
./test.sh: line 6: [: foo:: integer expression expected
a is different than b
为了使脚本按预期工作(例如将值作为字符串进行比较),您需要将比较更改为:
if [ ${a} = ${b} ]