Ошибка скрипта: -le: ожидается двоичный оператор

Я просто запускаю сценарии оболочки и получаю ошибки, пытающиеся выполнить следующий скрипт:

У меня есть следующий скрипт в файле 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

Script output:

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

Каков источник ошибки, которую я получил?

0
задан 27 November 2017 в 17:26

6 ответов

Источник ошибки: [: –le: binary operator expected - это тот факт, что вы используете unicode версию – вместо обычного -

. Примечание. То же самое относится к unicode ”, который вы используете вместо обычного "

Я переформатировал ваш код следующим образом:

#!/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"

Я внесла следующие изменения: [!d3 ] Заменил версию используемых вами символов unicode. Добавлен #!/bin/bash Удален space после знака =. Некоторые дополнительные улучшения.

5
ответ дан 22 May 2018 в 15:52
  • 1
    Почему у нас есть две версии? Кроме того, если – является версией Unicode, какая версия является «обычной», [F2] – Rockstar5645 3 December 2017 в 14:02
  • 2
    @ Rockstar5645 - Я предполагаю, что вы copy/paste операции -le из unicode source (html или word-document), поэтому вы получили unicode версию - и ". – Yaron 3 December 2017 в 14:14
  • 3
    Да, вот что я сделал ... – Rockstar5645 5 December 2017 в 15:29

Источник ошибки: [: –le: binary operator expected - это тот факт, что вы используете unicode версию – вместо обычного -

. Примечание. То же самое относится к unicode ”, который вы используете вместо обычного "

Я переформатировал ваш код следующим образом:

#!/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"

Я внесла следующие изменения:

Заменил версию используемых вами символов unicode. Добавлен #!/bin/bash Удален space после знака =. Некоторые дополнительные улучшения.
5
ответ дан 18 July 2018 в 02:29

Источник ошибки: [: –le: binary operator expected - это тот факт, что вы используете unicode версию – вместо обычного -

. Примечание. То же самое относится к unicode ”, который вы используете вместо обычного "

Я переформатировал ваш код следующим образом:

#!/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"

Я внесла следующие изменения:

Заменил версию используемых вами символов unicode. Добавлен #!/bin/bash Удален space после знака =. Некоторые дополнительные улучшения.
5
ответ дан 24 July 2018 в 17:34

Ответ Ярона помогает вам понять и удалить синтаксические ошибки.

В моем ответе используется какой-то «более приятный» синтаксис для того, чтобы делать то же самое и что-то еще, это может быть то, что вы хотите.

[ f1]

Запуск тестовых примеров,

$ ./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
3
ответ дан 22 May 2018 в 15:52

Ответ Ярона помогает вам понять и удалить синтаксические ошибки.

В моем ответе используется какой-то «более приятный» синтаксис для того, чтобы делать то же самое и что-то еще, это может быть то, что вы хотите.

#!/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"

Запуск тестовых примеров,

$ ./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
3
ответ дан 18 July 2018 в 02:29

Ответ Ярона помогает вам понять и удалить синтаксические ошибки.

В моем ответе используется какой-то «более приятный» синтаксис для того, чтобы делать то же самое и что-то еще, это может быть то, что вы хотите.

#!/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"

Запуск тестовых примеров,

$ ./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
3
ответ дан 24 July 2018 в 17:34

Другие вопросы по тегам:

Похожие вопросы: