我想从给定列表中生成一个随机数
例如,如果我给出数字
1,22,33,400,400,23,12,53 etc.
我想从给定的数字中选择一个随机数。
答案 0 :(得分:1)
无法找到与此完全相同的内容。所以这是我的尝试,正是123
在评论中提到的。该解决方案可跨shell变体移植,并且不使用任何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")
记住关联数组需要bash版本≥4才能工作。