Erro de script bash: expressão inteira esperada

6

Eu tenho um problema com um script bash no raspberry pi:

x='gpio -g read 22'

if [ $x -ge 1 ]
then
gpio -g write 23 1
fi

O erro é integer expression expected . Por quê?

    
por user124824 24.07.2015 / 12:00

2 respostas

11

Isso porque você está verificando se a string gpio -g read 22 é maior que 1. Como gpio -g read 22 não é um número, você recebe esse erro.

Você não explica o que está tentando fazer, mas acredito que queira comparar a saída do comando gpio . Para fazer isso, você precisa colocar o comando em $() ou backticks ( '' ):

x=$(gpio -g read 22)

if [ "$x" -ge 1 ]
then
   gpio -g write 23 1
fi

Ou, mais simplesmente:

[ "$(gpio -g read 22)" -ge 1 ] && gpio -g write 23 1

A atribuição foo='command' não é executada em command . A variável foo recebe o valor da string command e não da saída.

    
por 24.07.2015 / 12:04
0

A resposta acima funciona na maior parte do tempo, mas use o seguinte script:

#!/bin/bash

a='foo: '
b='44494949494'

if [ ${a} -eq ${b} ]
then
   echo "a matches b"
else
   echo "a is different than b"
fi

Em vez de repetir corretamente uma das opções acima, ele faz o seguinte:

./test.sh: line 6: [: foo:: integer expression expected
a is different than b

Para fazer o script funcionar conforme o esperado (por exemplo, comparar valores como strings) você precisa alterar a comparação para:

if [ ${a} = ${b} ]
    
por 22.09.2016 / 23:40