使用 BASH 的秒表脚本

Stopwatch Script using BASH

此脚本启动秒表并采用 1 个整数参数。秒表将在指定的时间开始,以秒为单位(如果给出了参数),或者从“0”开始(如果没有给出参数)。但是,如果我向这个脚本传递参数,它会阻碍脚本的核心功能,即天数不再更新。

if [  ]
then
    date1=(`date +%s`+);
else
    date1=`date +%s`;
fi


while ! read -t0; do 
    days=$(( $(($(date +%s) - date1)) / 86400 ))
    echo -ne "$days day(s) and $(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
    sleep 0.1
done

让脚本从特定时间开始很重要。我无法让它这样做。否则,脚本在没有传递任何参数的情况下工作正常

谢谢。

我会这样写你的脚本,但我承认我不明白你遇到的实际问题。请为您的问题添加更多详细信息。

#!/bin/bash
start=$(date +%s)
if [[  == ?([+-])+([0-9]) ]]; then
    ((start += ))
elif [[  ]]; then
    echo "invalid argument '': ignoring it"
fi

while true; do
    now=$(date +%s)
    days=$(( (now - start) / 86400 ))
    seconds=$(( (now - start) % 86400 ))
    printf "\r%d day(s) and %s " $days $(date --utc --date @$seconds +%T)
    sleep 0.1
done

这是最终的工作脚本。感谢格伦杰克曼。

# this script initiates a stopwatch
# this script can take 1 integer argument
# the stopwatch will start at the specified time, in seconds( if args are given ), or from '0'( if no args are given )
# Example : if you want the timer to start at 4 days, 5 hours, 33 minutes and 9 seconds, then you'd run the Script as :
# ./Stopwatch $((86400*4 + 3600*5 + 60*33 + 9 ))

if [  ]
then
    date1=$(($(date +%s) - ));
else
    date1=`date +%s`;
fi


while ! read -t0; do 
    days=$(( $(($(date +%s) - date1)) / 86400 ))
    echo -ne "$days day(s) and $(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
    sleep 0.1
done