한 줄에 5 분 표시되는 Bash 스크립트 카운트 다운 [닫힘]

5 분의 카운트 다운을 원하고 매초마다 업데이트하고 같은 줄에 결과를 표시하고 싶습니다. Bash 스크립팅으로도 가능합니까?



답변

이것은 Bash 쉘에서 작동합니다.

secs=$((5 * 60))
while [ $secs -gt 0 ]; do
   echo -ne "$secs\033[0K\r"
   sleep 1
   : $((secs--))
done

특수 문자 \ 033 [OK] 는 이전 출력에서 ​​남은 문자가있는 경우 나머지 행을 정리하는 행의 끝을 나타내고 \ r 은 커서를 행의 시작으로 이동시키는 캐리지 리턴입니다. stackoverflow.com 에는이 기능에 대한 유용한 정보가 있습니다 .

while 루프에서 자체 명령 또는 무엇이든 추가 할 수 있습니다. 좀 더 구체적인 것이 필요하면 자세한 내용을 알려주십시오.


답변

올바른 선행 0과 지원 시간으로 올바른 출력 형식 (HH : MM : SS)이 개선 된 항목은 다음과 같습니다.

#!/bin/bash

m=${1}-1 # add minus 1 

Floor () {
  DIVIDEND=${1}
  DIVISOR=${2}
  RESULT=$(( ( ${DIVIDEND} - ( ${DIVIDEND} % ${DIVISOR}) )/${DIVISOR} ))
  echo ${RESULT}
}

Timecount(){
        s=${1}
        HOUR=$( Floor ${s} 60/60 )
        s=$((${s}-(60*60*${HOUR})))
        MIN=$( Floor ${s} 60 )
        SEC=$((${s}-60*${MIN}))
     while [ $HOUR -ge 0 ]; do
        while [ $MIN -ge 0 ]; do
                while [ $SEC -ge 0 ]; do
                        printf "%02d:%02d:%02d\033[0K\r" $HOUR $MIN $SEC
                        SEC=$((SEC-1))
                        sleep 1
                done
                SEC=59
                MIN=$((MIN-1))
        done
        MIN=59
        HOUR=$((HOUR-1))
     done
}

Timecount $m

다음과 같은 출력을 제공합니다.

02:04:15


답변