Я хочу, чтобы сгенерировать случайное число из заданного спискаBash генерация случайных чисел из пула номеров
Например, если я дам числу
1,22,33,400,400,23,12,53 etc.
Я хочу, чтобы выбрать случайное число из заданных чисел ,
Я хочу, чтобы сгенерировать случайное число из заданного спискаBash генерация случайных чисел из пула номеров
Например, если я дам числу
1,22,33,400,400,23,12,53 etc.
Я хочу, чтобы выбрать случайное число из заданных чисел ,
Не удалось найти точный дубликат этого. Итак, вот моя попытка, именно то, что 123
упоминает в комментариях. Решение переносится по вариантам оболочки и не использует никакие двоичные файлы shell
для упрощения производительности.
Вы можете запускать приведенные ниже команды непосредственно на консоли.
# Read the elements into bash array, with IFS being the de-limiter for input
IFS="," read -ra randomNos <<< "1,22,33,400,400,23,12,53"
# Print the random numbers using the '$RANDOM' variable built-in modulo with
# array length.
printf "%s\n" "${randomNos[ $RANDOM % ${#randomNos[@]}]}"
Согласно комментариям ниже, если вы хотите игнорировать определенный список номеров из диапазона для выбора; сделать подход, как показано ниже
#!/bin/bash
# Initilzing the ignore list with the numbers you have mentioned
declare -A ignoreList='([21]="1" [25]="1" [53]="1" [80]="1" [143]="1" [587]="1" [990]="1" [993]="1")'
# Generating the random number
randomNumber="$(($RANDOM % 1023))"
# Printing the number if it is not in the ignore list
[[ ! -n "${ignoreList["$randomNumber"]}" ]] && printf "%s\n" "$randomNumber"
Вы можете сохранить его в переменной bash
как
randomPortNumber=$([[ ! -n "${ignoreList["$randomNumber"]}" ]] && printf "%s\n" "$randomNumber")
Помните ассоциативные-массивы нужно Баш версии ≥4 работать.
Поместите их в массив, rand mod размером с массив. – 123