Intereting Posts
BASH: проблемы с Fifo – кажется избирательным в отношении ввода Расписание сценария отмены для запуска по истечении продолжительности установка переменной среды как функции другой переменной env Как установить GNU / Linux на ПК с ОС Windows без пароля BIOS? Найти файлы с тем же именем, но с разными расширениями, отправить в tgz Как найти драйвер (модуль), связанный с устройством SATA в Linux? X11 отправляет уведомление всем пользователям на всех См. Перенаправление STDOUT текущего процесса Текстовая обработка только для условий, встречающихся в строке X до Y Вставка переменных в команду в сценарии оболочки `set -e` и` grep` idiom для предотвращения преждевременного выхода из сценария оболочки, когда шаблон не найден Как отслеживать использование процессора / памяти в одном процессе? как использовать регулярное выражение в псевдониме? Не удается (принудительно) удалить каталог в сборке Docker Могу ли я установить FreeBSD, OpenBSD, NetBSD и DragonFly на один диск?

целочисленное выражение ожидается bash

Пытается зациклировать фразу, введенную пользователем, на определенное количество раз, которое также вводится пользователем. Продолжайте получать ожидаемое целочисленное выражение ошибки, и я не могу понять, как его исправить.

#!/bin/sh echo "What do you want to say?" read phrase echo "How many times?" read num while [ "num" -ge 0 ] do echo $phrase num='expr num - 1' done 

Вам нужно использовать $ чтобы развернуть переменную в bash, если она не находится внутри (( )) . Вы сравниваете буквенную строку «num» с номером 0. Используйте один из следующих вариантов:

 while [ "$num" -ge 0 ] # POSIX while (( num >= 0 )); # bash 

Пара исправлений.

 #!/bin/sh echo "What do you want to say?" read phrase echo "How many times?" read num while [ $num -gt 0 ]; do echo $phrase let num='num - 1' done 

пример

 $ ./cmd.bash What do you want to say? hi How many times? 4 hi hi hi hi 

Вы можете сделать пересчет $num немного более упорядоченным и легче читать с помощью этих обозначений.

Измените эту строку:

  let num='num - 1' 

с этим:

  ( num-- )) 

Смущает вопрос о том, когда использовать или не использовать переменную $ для переменных, обычно вам нужно проконсультироваться с man-страницей для bash и test при выполнении такой работы. Это изменение подходит, если вы используете bash а не только родной sh .

Детали

  1. Вы должны использовать переменную форму $num при выполнении проверки границ в секции управления циклами while .
  2. Используйте let вместо expr .
  3. Оценка для цикла включает в себя этап 0 с -ge который даст вам 1 больше, чем вы хотите.

пример

С проверкой -gt циклов while с помощью -gt вы получите этот результат:

 $ ./cmd.bash What do you want to say? hi How many times? 2 hi 1 hi 0 

Если вы используете свой -ge вы получите следующее:

 $ ./cmd.bash What do you want to say? hi How many times? 2 hi 1 hi 0 hi -1