仍在练习我的练习。感谢您对我之前的问题的帮助。
我们的任务是为终端窗口制作“屏幕保护程序”。
我想做的是在等待按键时,随机生成一个数字,然后选择我将添加到文件中的几张 ASCII 艺术图片之一。
到目前为止我所想出的方法是有效的,但它只会在我按下一个键后重新生成另一个数字。我希望它继续生成一个数字,直到我按下一个键,然后它将我从循环中转出。
while read -r -n1 key
do
num=$(awk -v min=5 -v max=10 'BEGIN{srand(); print int(min+rand()*(max-
min+1))}')
echo $num
case $num in
1)
echo "hello"
sleep 5
;;
2)
echo "bye"
sleep 5
;;
***and so on***
esac
done
我确信我忽略了一些简单的事情。今天在这把椅子上坐了 7 个小时的大部分时间。
非常感谢
编辑:找到这个输出一些内容(循环)直到按下一个键
并相应地对其进行了调整,但直到最后一个 sleep 5 完成运行后我才得到光标。
#!/bin/bash
while true; do
num=$(awk -v min=5 -v max=10 'BEGIN{srand(); print int(min+rand()*(max-min+1))}')
case $num in
1)
echo "hello"
sleep 5
;;
*)
echo "whats going on 'ere?"
sleep 5 &
wait $!
;;
esac
# In the following line -t for timeout, -N for just 1 character
read -t 0.25 -N 1 input
if [[ $input = "q" ]] || [[ $input = "Q" ]]; then
# The following line is for the prompt to appear on a new line.
echo
break
fi
done
答案1
成功了。结束了这个
#!/bin/bash
tput civis
while true; do
num=$(awk -v min=5 -v max=10 'BEGIN{srand(); print int(min+rand()*(max-min+1))}')
case $num in
1)
clear
cat ./s0.file
sleep 3
;;
....
*)
clear
cat ./s9.file
sleep 3
;;
esac
# In the following line -t for timeout, -N for just 1 character
read -t 0.25 -N 1 input
if [[ $input = " " ]] || [[ $input = " " ]]; then
# The following line is for the prompt to appear on a new line.
echo
break
fi
done
tput cnorm