学校の練習:「スクリーンセーバー」

学校の練習:「スクリーンセーバー」

まだ運動を練習しています。前の質問にご協力いただきありがとうございます。

私たちの使命は、ターミナルウィンドウに「スクリーンセーバー」を作成することです。

私がやりたいことは、キーを押すのを待っている間にランダムに数字を生成し、ファイルに追加するいくつかのASCIIアートピクチャの1つを選択することです。

これまで私が思いついた方法は効果がありますが、キーを押した後は他の数字が再生成されるだけです。キーを押すまで引き続き数字を生成したいと思います。これにより、ループから抜け出すことができます。

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時間のうち最も多くの時間をこの椅子で過ごしました。

非常にありがとう

編集:これを見つけましたキーを押すまで何かを出力します(ループ)。

それに応じて調整しましたが、最後の睡眠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

おすすめ記事