학교 연습: "화면 보호기"

학교 연습: "화면 보호기"

아직도 운동을 연습하고 있어요. 이전 질문에 도움을 주셔서 감사합니다.

우리의 임무는 터미널 창에 "화면 보호기"를 만드는 것입니다.

내가 하고 싶은 일은 키 누르기를 기다리는 동안 무작위로 숫자를 생성한 다음 파일에 추가할 여러 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시간 중 가장 많은 시간을 이 의자에서 보냈습니다.

매우 감사합니다

편집 : 이것을 찾았습니다키를 누를 때까지 무언가를 출력합니다(루프).

그에 따라 조정했지만 마지막 수면 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

관련 정보