学校实践:“屏幕保护程序”

学校实践:“屏幕保护程序”

仍在练习我的练习。感谢您对我之前的问题的帮助。

我们的任务是为终端窗口制作“屏幕保护程序”。

我想做的是在等待按键时,随机生成一个数字,然后选择我将添加到文件中的几张 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

相关内容