在数组中声明并在bash脚本中从数组中随机打印值

时间:2018-07-10 13:19:13

标签: arrays bash shell

这是我的bash脚本代码

declare -a types=("m4.xlarge" "m5.12xlarge" "m5d.12xlarge" "m4.large" "m4.16xlarge" "t2.2xlarge" "c4.large" "c5.xlarge" "r4.2xlarge" "x1e.4xlarge" "h1.16xlarge" "i3.16xlarge" );
echo "array declared"


for i in {1..100}
do

for (( i=1; i<${arraylength}+1; i++ ))   
 do

#index=$( jot -r 1  0 $((${#expressions[@]} - 1)) )
    randominstancetype=$[$RANDOM % ${#types[@]}];

    #randominstancetype=$( shuf -i0-1 -n1 $((${#types[@]} )) );
    #randominstancepvtiptype=$[$RANDOM % ${#pvtip[@]}];
        #randominstancepubiptype=$[$RANDOM % ${#pubip[@]}];
done
 done

我试图声明数组,然后随机打印数组中的元素大约100次。当前没有显示元素的名称,而是显示为3 5 8,等等。我们将不胜感激。

3 个答案:

答案 0 :(得分:1)

$[...]$((...))的旧版本。因此,您要做的只是简单的算术扩展,然后扩展回随机索引。

要使用生成的索引来访问数组 的元素,请使用:

echo "${types[$RANDOM%${#types[@]}]}"

答案 1 :(得分:0)

尝试以下代码段:

#!/bin/bash  
declare -a types=("m4.xlarge" "m5.12xlarge" "m5d.12xlarge" "m4.large" "m4.16xlarge" "t2.2xlarge" "c4.large" "c5.xlarge" "r4.2xlarge" "x1e.4xlarge" "h1.16xlarge" "i3.16xlarge" )
echo "array declared"

max_random=32767
type_count=${#types[@]}
factor=$(( max_random / type_count ))

for i in {1..1000}
do
    random_index=$(( $RANDOM / $factor ))
    random_instance_type=${types[$random_index]}
    echo $random_instance_type
done

答案 2 :(得分:0)

这将打印阵列types的随机顺序。

for j in {1..100}; do
  for i in $(shuf -i 0-$((${#types[*]}-1))); do
     printf "%s " "${types[i]}";
  done;
  printf "\n";
done

如果您允许重复,那么您可以

for j in {1..100}; do
  for i in $(shuf -n ${#types[*]} -r -i 0-$((${#types[*]}-1))); do
     printf "%s " "${types[i]}";
  done;
  printf "\n";
done

命令使用shuf及其选项:

  
      
  • -n--head-count=COUNT最多输出COUNT
  •   
  • -i--input-range=LO-HI:将每个数字LOHI视为输入行
  •   
  • -r--repeat可以重复输出行
  •   
     

来源man shuf