Bash-скрипт для поиска строк и помещения их в массив

Bash-скрипт для поиска строк и помещения их в массив

Я ищу способ создать bash-скрипт, который будет выполнять grep-анализ вывода команды и помещать строки в массив, а также иметь возможность случайным образом выбирать одну строку из массива, например, каждую минуту, и помещать ее как переменную. Время случайного выбора должно быть настраиваемым.

Command output:
string
string2
string3

Поместите все эти строки в массив, случайным образом выберите одну из них и поместите ее в качестве переменной.

desired result:
strings -> array <- randomly selecting from array every 1 minute and placing string selected as variable for further use 

решение1

В bash можно использовать readarrayподстановку команд with для захвата выводимых данных, разделенных символами новой строки, в массив; например:

readarray -t outputs < <(seq 10)

Где я использовал seq 10для производства некоторого вывода. Это приводит к:

$ declare -p outputs
declare -a outputs='([0]="1" [1]="2" [2]="3" [3]="4" [4]="5" [5]="6" [6]="7" [7]="8" [8]="9" [9]="10")'

Чтобы псевдослучайно выбирать один из этих элементов каждую минуту:

while :
do
  element=$(( RANDOM % ${#outputs[@]} ))
  var=${outputs[$element]}
  sleep 60
done

Учитывая, что массивы bash начинаются с нулевого индекса, $(( ))арифметика говорит использовать значение по $RANDOMмодулю числа элементов в outputsмассиве.

Связанный контент