Bash - Повторить ввод n количество раз (введено пользователем) - PullRequest
1 голос
/ 08 мая 2020

Итак, у меня есть небольшая часть bash, с которой я борюсь. В основном я беру пользовательский ввод ($ time) от 1 до 10 и предопределенное слово ($ word), которое пользователь ввел ранее, и я хочу, чтобы он повторял $ word, $ time times.

Моя попытка :

while [[ $time -le 10 ]]
do
    echo $word
    time=$((time + 1))
done

Любая помощь очень ценится!

Ответы [ 4 ]

2 голосов
/ 08 мая 2020

yes повторяет вещи.

time=6
yes "$word" | head -$time
1 голос
/ 08 мая 2020
function run() {
    number=$1
    word=$2
    for n in $(seq $number); do
      echo "$word";
    done
}

run 5 "hello"

Вывод:

hello
hello
hello
hello
hello
1 голос
/ 08 мая 2020

С для l oop:

time="3"
word="hello"
for ((i=0; i<$time; i++)); do echo "$word"; done

Вывод:

hello
hello
hello
0 голосов
/ 08 мая 2020

То, что вы сделали, кажется прекрасным, но я привел пример с использованием seq для справки.

Расширяя то, что вы делаете, вы можете проверить ввод, используя что-то вроде while l oop или заявление о случае. В основном проверьте, что пользователь ввел что-то от 1 до 9 или 10. В этом случае я использовал оператор IF с регулярным выражением. Посмотрим, сможете ли вы сделать то же самое для входного слова? возможно, проверьте, что он не пустой, и заставьте их ввести что-то, что содержит числа и / или символы et c?

Пример:

#!/bin/bash
echo "Please input a word:"
read -r word

# force a while number is not 1-9 or 10 keep asking for a number.
while [[ 1 ]] ; do
  echo "Input value from 1 - 10"
  read -r inval
  if [[ $inval =~ ^[1-9]$|10 ]] ;then
    echo "Number $inval is a good pick, lets go!"
    break
  else
    echo "Sorry, please choose from 1-10"
  fi
done
# simple example using 'seq' from 1 to inputted value
for i in $(seq 1 "${inval}"); do
  echo "${word}"
done

Пример вывода:

Please input a word:
Hello World !
Input value from 1 - 10
11
Sorry, please choose from 1-10
Input value from 1 - 10
what
Sorry, please choose from 1-10
Input value from 1 - 10
10
Number 10 is a good pick, lets go!
Hello World !
Hello World !
Hello World !
Hello World !
Hello World !
Hello World !
Hello World !
Hello World !
Hello World !
Hello World !

Дополнительная литература: Как выполнить итерацию по диапазону чисел, определенному переменными в Bash?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...