Intereting Posts
Можно ли предупредить / предупредить, что текущий путь больше не является действительной символической ссылкой? Как найти именно этот исполняемый файл, который будет запущен, если это имя введено в командной строке? Игнорировать глобусы, которые не соответствуют чему-либо Объединение цикла вокруг команды sed обрабатывает многие файлы в одном каталоге Robolinux Live на микропрограмме Dell 5559 i7 6500U У кучи файлов есть 777 разрешений Цвета Vim, конфликтующие с терминальными У SystemD возникли процессы N? Как тихо получить пустую строку из шаблона шара без совпадений Возобновление ddrescue всегда перезапускается при первой попытке? Как отключить тайм-аут запроса пароля для дешифрования раздела во время загрузки? Имитировать chroot с unshare Что такое abrt и процесс abrt-action-generate-core-backtrace? объединение 3 отдельных массивов в один многомерный массив в bash Переменная пустая, когда используется в выражении if, но не echo

Как создать цикл for с переменным числом итераций?

Как вы повторяете цикл n количество раз, когда n задается пользователем в начале?

Я написал сценарий оболочки и должен повторить определенную часть его n чисел раз (в зависимости от того, сколько раз пользователь желает).

Мой сценарий выглядит так:

echo "how many times would you like to print Hello World?" read num for i in {1.."$num"} do echo "Hello World" done 

Если я изменил «num» на число, такое как «5», цикл работает, но мне нужно, чтобы пользователь мог указать количество раз, чтобы итерации через цикл.

Вы можете использовать seq

 for i in $(seq 1 "$num") 

или ваша оболочка может поддерживать циклы типа C, например, в bash

 for ((i=0; i<$num; i++)) 
 echo "how many times would you like to run your loop ?" read max i=0 while [ "$((i+=1))" -le "$max" ] do # whatever you want to do here done 

Использование «Арифметической оценки» (только для bash):

 read -p "how many times would you like to print Hello World? " max i=0 while (( i++ < max )) do echo "$i, Hello World." done 

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

 while (( i++ < ${max//[^0-9]} )) 

Еще один способ с {1.."$num"} . Экзамен Bash необходимо оценить до того, как это будет перенесено в цикл for. Вы можете использовать синтаксис расширения таким образом, чтобы он работал:

 for i in $(eval echo {1.."$num"}); do echo $i; done