Erro de script: –le: operador binário esperado

0

Estou apenas começando o shell script e recebo erros ao tentar executar o script a seguir:

Eu tenho o seguinte script em um arquivo script.sh

echo “enter a value”
read n
s=0
i=0
while [ $i –le $n ]
do
  if [ 'expr $i%2' -eq 0 ]
  then
    s= 'expr $s + $i '
  fi
  i= 'expr $i + 1'
done
echo “sum of n even numbers”
echo $s

Saída de script:

akhil@akhil-Inspiron-5559:~/Desktop/temp$ chmod 755 script.sh
akhil@akhil-Inspiron-5559:~/Desktop/temp$ ./script.sh
“enter a value”
3
./script.sh: line 5: [: –le: binary operator expected
“sum of n even numbers”
0

Qual é a fonte do erro que recebi?

    
por Rockstar5645 27.11.2017 / 14:12

2 respostas

5

A origem do erro: [: –le: binary operator expected é o fato de você estar usando a unicode versão de em vez da normal -

Observação: o mesmo se aplica ao unicode que você está usando em vez do normal "

Eu reformatei seu código para ser o seguinte:

#!/bin/bash
echo "enter a value"
read -r n
s=0
i=0
while [ $i -le "$n" ]
  do
  if [ "$(expr $i%2)" -eq 0 ]
  then
    s=$(expr $s + $i)
  fi
  i=$(expr $i + 1)
done
echo "sum of n even numbers"
echo "$s"

Eu fiz as seguintes alterações:

  • Substituiu a versão unicode dos caracteres que você usou
  • Adicionado #!/bin/bash
  • Excluído space após o sinal =
  • Algumas melhorias extras.
por Yaron 27.11.2017 / 14:18
3

A resposta de Yaron ajuda você a entender e remover os erros de sintaxe.

Minha resposta usa uma sintaxe mais "legal" para fazer a mesma coisa e outra coisa, que pode ser o que você quer.

#!/bin/bash

read -p "enter a number: " n

s=0
i=1
j=0
while [ $i -le $n ]
do
  if [ $(( i % 2 )) -eq 0 ]
  then
    s=$(( s + i ))
    j=$(( j + 1 ))
  fi
  i=$(( i + 1 ))

#  uncomment: remove the '#' from the beginning of the line

#  echo "i=$i"  # uncomment to get debug output
done
#echo "n=$n"  # uncomment to get debug output 
#echo "j=$j"  # uncomment to get debug output
#echo "s=$s"  # uncomment to get debug output

echo "Is this what you want?"
echo "sum of $j even numbers ( <= $n ) = $s"
echo "or is this what you want?"

s=0
for ((i=1;i<=n;i++))
do
    echo -n "$(( 2*i )) "
    s=$(( s + 2*i ))
done
echo ""
echo "sum of $n even numbers = $s"

Execução de exemplos de teste,

$ ./sum-of-even-numbers 
enter a number: 3
Is this what you want?
sum of 1 even numbers ( <= 3 ) = 2
or is this what you want?
2 4 6 
sum of 3 even numbers = 12

$ ./sum-of-even-numbers
enter a number: 4
Is this what you want?
sum of 2 even numbers ( <= 4 ) = 6
or is this what you want?
2 4 6 8 
sum of 4 even numbers = 20

$ ./sum-of-even-numbers
enter a number: 6
Is this what you want?
sum of 3 even numbers ( <= 6 ) = 12
or is this what you want?
2 4 6 8 10 12 
sum of 6 even numbers = 42
    
por sudodus 27.11.2017 / 16:03