Bash 脚本错误:需要整数表达式

Bash 脚本错误:需要整数表达式

我在树莓派上使用 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} ]

相关内容