“) Erro de sintaxe Operador aritmético inválido (token de erro é”

4

Eu tenho comandos em um script bash obtendo dados de um arquivo de texto de origem e adicionando o valor de uma variável a ele e usando-o em uma condição if / else.

Arquivo de dados de origem ( db_count.ini ) (Nota: contém um espaço no interior das aspas duplas):

db_ctdy_sr=" 7"

Script:

source db_count.ini

# Removing the whitespace on the stored data
n_db_sr=${db_ctdy_sr// /}

# Sum
c=0
b=7

echo "Value of db:"$n_db_sr

sm=$((n_db_sr + c))

echo "The value of db:"
echo "$sm" 
echo $sm 

if [ "$sm" = "$b" ]
then
   echo "Success."
else
   echo "Not."
fi

echo "Bye!"

Mas quando eu executo o script, sempre sou eu assim

The value of db:7
") Syntax error Invalid arithmetic operator (error token is "
The value of:


Not.
Bye!

Alguma dica? Alguma sugestão?

Obrigado!

    
por Edmhar 21.07.2016 / 12:06

1 resposta

3

Seu script está funcionando aqui. A única maneira de fazê-lo produzir o mesmo erro que você informa é fazer com que a variável db_ctdy_sr contenha um new line :

Adicione uma nova linha:

source db_count.ini
db_ctdy_sr=$' 7\r'

E, em seguida, teste o script:

$ ./so

Value of db:7
")syntax error: invalid arithmetic operator (error token is "
The value of db:
 //test if working
//test if working
Not.
Bye!

Isso pode acontecer se o arquivo db_count.ini contiver caracteres de retorno de carro do DOS.

Executar:

$ sed -n l db_count.ini
db_ctdy_sr= 7\r$

(ou similar) para ver o \r no arquivo.

remova os retornos de carro editando o arquivo e removendo os caracteres com falha, ou alterando esta linha:

n_db_sr=${db_ctdy_sr// /}

Para:

n_db_sr=${db_ctdy_sr//[ $'\r'}]}

Ou, mais geral, para remover todos os caracteres de controle:

n_db_sr=${db_ctdy_sr//[ $'
shopt -s globasciiranges
1'-$'7']}

Para garantir que a ordem de intercalação não modifique a ordem pretendida dos valores ascii de 1 (octal 001) a 31 (octal 037), defina a variável bash:

source db_count.ini
db_ctdy_sr=$' 7\r'

Disponível desde a versão 4.3 do bash.

    
por 22.07.2016 / 03:43