Я просто запускаю сценарии оболочки и получаю ошибки, пытающиеся выполнить следующий скрипт:
У меня есть следующий скрипт в файле 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
Каков источник ошибки, которую я получил?
Источник ошибки: [: –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 после знака =. Некоторые дополнительные улучшения.
Источник ошибки: [: –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 после знака =. Некоторые дополнительные улучшения.Источник ошибки: [: –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 после знака =. Некоторые дополнительные улучшения.Ответ Ярона помогает вам понять и удалить синтаксические ошибки.
В моем ответе используется какой-то «более приятный» синтаксис для того, чтобы делать то же самое и что-то еще, это может быть то, что вы хотите.
[ 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
Ответ Ярона помогает вам понять и удалить синтаксические ошибки.
В моем ответе используется какой-то «более приятный» синтаксис для того, чтобы делать то же самое и что-то еще, это может быть то, что вы хотите.
#!/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
Ответ Ярона помогает вам понять и удалить синтаксические ошибки.
В моем ответе используется какой-то «более приятный» синтаксис для того, чтобы делать то же самое и что-то еще, это может быть то, что вы хотите.
#!/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