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