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


23

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


카운트 다운은 무엇을합니까? 모든 것에 대해 좀 더 구체적이어야합니다.
Adrian Frühwirth

이것은 절대적으로 가능합니다. 왜 (실제로 어떤 시스템 / 네트워크 관리 문제를 해결하려고하는지) 알려 주면 사용 가능한 많은 방법 중 가장 적합한 방법을 알려줄 수 있습니다. 그것을 할 방법 "일반 있다면 나는이 작업을 수행 bash? 스크립트`질문은 아마 더 나은에 적합 질문 유닉스 및 리눅스 - 저에게 알려 주시면 :) 당신을 위해 거기를 마이그레이션 할 수 있습니다
voretaq7

답변:


42

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


0K 대신 ascii-table.com/ansi-escape-sequences.php에 따라 \ 033 [K를 의미 합니까?
Jody Lee Bruchon

내가 넣어 \r(이 첫 번째 문자를 숨기기 위해 방지) 라인의 끝 부분에 커서를 넣어 시작 부분에. 업데이트 된 버전은 다음과 같습니다. gist.github.com/boillodmanuel/676b3af823fae4177f1d0b41a6f23442 감사
user1067920

13

올바른 선행 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

출력은 꽤 아닙니다 HH:MM:SS. 한 자리 분 또는 초 동안을 볼 수 있습니다 00:4:5.
chishaku
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.