创建一个充当算命先生或“魔术8球”的bash脚本
发布时间:2020-12-15 20:57:08 所属栏目:安全 来源:网络整理
导读:我正在尝试创建一个bash脚本,它本质上就像一个魔术8球,有6种不同的响应(是,否,可能,很难说,不太可能和未知).关键是,一旦给出答复,在给出所有答复之前不应再给出答案. 这是我到目前为止: #!/bin/bashecho "Ask and you shall receive your fortune: "n=$((RA
我正在尝试创建一个bash脚本,它本质上就像一个魔术8球,有6种不同的响应(是,否,可能,很难说,不太可能和未知).关键是,一旦给出答复,在给出所有答复之前不应再给出答案.
这是我到目前为止: #!/bin/bash echo "Ask and you shall receive your fortune: " n=$((RANDOM*6/32767)) while [`grep $n temp | wc awk '{print$3}'` -eq 0]; do n=$((RANDOM*6/32767)) done grep -v $n temp > temp2 mv temp2 temp 基本上我在temp文件的不同行上都有6个响应,我试图构造循环,这样一旦给出响应,它就会创建一个没有响应的新文件(temp2),然后将其复制回temp.然后,一旦临时文件为空,它将从头开始继续. 我非常肯定我当前的内循环是错误的,而且我需要一个外循环,但我对此很新,我被卡住了. 任何帮助将不胜感激. 解决方法
尝试这样的事情:
#!/bin/bash shuffle() { local i tmp size max rand # $RANDOM % (i+1) is biased because of the limited range of $RANDOM # Compensate by using a range which is a multiple of the array size. size=${#array[*]} max=$(( 32768 / size * size )) for ((i=size-1; i>0; i--)); do while (( (rand=$RANDOM) >= max )); do :; done rand=$(( rand % (i+1) )) tmp=${array[i]} array[i]=${array[rand]} array[rand]=$tmp done } array=( 'Yes' 'No' 'Maybe' 'Hard to tell' 'Unknown' 'Unlikely' ) shuffle for var in "${array[@]}" do echo -n "Ask a question: " read q echo "${var}" done (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |