使用随机函数的Linux

使用随机函数的Linux,linux,bash,scripting,Linux,Bash,Scripting,我在学校接受了一项作业,如果指定的话,我会生成随机颜色的输出。当选择“随机”选项时,我的程序不会生成我想要的颜色 我对程序的输入是: echoc RANDOM|colour string 我的代码如下所示: declare -A colours=( [black]="0;30" [red]="0;31" [green]="0;32" [yellow]="0;33" [blue]="0;34" [magenta]="0;35" [cyan]="0;36" [white]="0;37"

我在学校接受了一项作业,如果指定的话,我会生成随机颜色的输出。当选择“随机”选项时,我的程序不会生成我想要的颜色

我对程序的输入是:

echoc RANDOM|colour string
我的代码如下所示:

    declare -A colours=( 
[black]="0;30" [red]="0;31" [green]="0;32" [yellow]="0;33" [blue]="0;34" [magenta]="0;35" [cyan]="0;36" [white]="0;37"
[BLACK]="1;30" [RED]="1;31" [GREEN]="1;32" [YELLOW]="1;33" [BLUE]="1;34" [MAGENTA]="1;35" [CYAN]="1;36" [WHITE]="1;37")


if [ $# -lt 2 ]; then
  echo "Usage: echoc COLOUR|RANDOM STRING"
  exit 1
fi

regex='^red$|^green$|^yellow$|^blue$|^magenta$|^cyan$|^white|^black$'
shopt -s nocasematch

if [[ $1 =~ $regex ]]; then        
  printf '\033[%sm' ${colours[$1]}
  shift
  printf '%s\033[0m\n' "$*"
  exit 0
elif [[ $1 == "RANDOM" ]]; then   
  printf '\033[%sm' ${colours[$((RANDOM%8+1))]}
  shift
  printf '%s\033[0m\n' "$*"
  exit 3
else
  echo COLOUR must be one of 'red|green|yellow|blue|magenta|cyan|white|RANDOM'
  exit 2
fi

这是因为当您调用
${colors[$((随机%8+1))]}
bash将尝试查找
1
2
或。。。或关联数组中的
8
。。。这是不存在的。祝你好运顺便说一句,我真的不明白所有的反对票!你的问题不是请做我的家庭作业。你的问题是:我已经这样做了,但我看不出我做错了什么。我相信如果你没有在学校里提到“作业”这个词,你就不会得到这么多的反对票……谢谢,是的,我没有要求你们重写它,甚至没有写正确的一行,只要给我指出正确的方向就行了。谢谢这会更好,因为希望derp的值为1到8,然后我可以在数组中搜索该参数,derp=$($RANDOM%8+1))printf'\033[%sm'${colors[$derp]}不,这也不行。你需要构建一个数组,其中的字段是
颜色的键,然后从这个数组中随机抽取一个元素和
颜色中的相应值。祝你好运。好的,所以我在数组中添加了,[1]=“0;30”[2]=“0;31”…[8]=“0;37”,不,谢谢你的帮助:)
declare -A colours=(

[1]="0;30" [2]="0;31" [3]="0;32" [4]="0;33" [5]="0;34" [6]="0;35" [7]="0;36" [8]="0;37"
[black]="0;30" [red]="0;31" [green]="0;32" [yellow]="0;33" [blue]="0;34" [magenta]="0;35" [cyan]="0;36" [white]="0;37"
[BLACK]="1;30" [RED]="1;31" [GREEN]="1;32" [YELLOW]="1;33" [BLUE]="1;34" [MAGENTA]="1;35" [CYAN]="1;36" [WHITE]="1;37")


if [ $# -lt 2 ]; then

    echo "Usage: echoc COLOUR|RANDOM STRING"

    exit 1

fi


regex='^red$|^green$|^yellow$|^blue$|^magenta$|^cyan$|^white|^black$'

shopt -s nocasematch

if [[ $1 =~ $regex ]]; then

    printf '\033[%sm' ${colours[$1]}

    shift

    printf '%s\033[0m\n' "$*"

    exit 0

elif [[ $1 == "RANDOM" ]]; then

derp=$(($RANDOM%8+1))

    printf '\033[%sm' ${colours["$derp"]}

    shift

    printf '%s\033[0m\n' "$*"

    exit 3

    else

    echo COLOUR must be one of 'red|green|yellow|blue|magenta|cyan|white|RANDOM'

    exit 2

fi