일반적으로 스톱워치로 사용하기 위해 .bashrc 파일에 저장되지만, 시간 단위가 다른 여러 명령을 사용하고 호출할 때 약간 불편합니다.
function time_seconds()
{
echo "Counting to $1 seconds"
time_func $1
}
function time_minutes()
{
echo "Counting to $1 minutes"
time_func $1*60
}
function time_hours()
{
echo "Counting to $1 hours"
time_func $1*60*60
}
function time_flexible() # accepts flexible input hh:mm:ss (does not work)
{
echo "Counting to $1"
secs=$(time2seconds $1)
time_func $secs
}
이 모든 기능, 명령을 하나의 기능, 하나의 명령으로 변환하고 싶습니다. 많은 사람들이 이 명령이 sleep 명령만큼 유용하다고 생각할 것이라고 생각합니다. 음, 꼭 그런 것은 아니지만... 여전히 매우 편리합니다. sleep 명령에 관해 말하면 다음과 같이 작동합니다. 예를 들면 다음과 같습니다.
sleep 5h 22m 44s
이 명령을 sleep 명령과 정확히 동일한 입력 값을 허용하는 스톱워치 명령으로 바꾸고 싶습니다. 예를 들면 다음과 같습니다.
stopwatch 5h 22m 44s
어떻게 이를 달성할 수 있나요?
p.s. 이 작업을 더 간단하고 쉽게 만드는 변경 사항을 확인하려면 스톱워치 디스플레이 출력을 자유롭게 수정하세요.
답변1
h
m
일반 초 또는 접미사 및/또는 가 붙은 양의 정수 로 지속 시간을 얻는다고 가정하면 s
다음은 지속 시간을 초 단위로 계산합니다(그러나아니요제공된 인수(접미사 없음)가 실제로 양의 정수인지, 접미사가 올바르게 지정되었는지 확인하기 위해 세심한 주의를 기울이지 않았는지 확인하세요.
to_seconds () {
seconds=0
for ts do
case $ts in
*h) seconds=$(( seconds + 60*60*"${ts%h}" )) ;;
*m) seconds=$(( seconds + 60*"${ts%m}" )) ;;
*) seconds=$(( seconds + "${ts%s}" )) ;;
esac
done
printf '%s\n' "$seconds"
}
함수 내의 루프는 주어진 인수를 반복합니다.
매개변수 대체는 ${ts%h}
값 끝에서 후행(있는 경우)을 제거합니다.h
$ts
매개변수로 사용하는 경우 5m 5m 5m
초~15분까지 계산됩니다.
아마도 이 정확한 형식(별도의 함수)은 아니지만 현재 작성 중인 코드의 일부로 코드에서 사용할 수 있어야 합니다.
시험:
$ to_seconds 5h 22m 44s
19364
$ to_seconds 5h 22m 44
19364
$ to_seconds 44
44
$ to_seconds 10
10
$ to_seconds 10m
600
$ to_seconds 10h
36000
$ to_seconds 2i
bash: seconds + 2i: value too great for base (error token is "2i")
주어진 숫자가 정수인지 확인하려면 다음을 참조하세요.