使用 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
此脚本启动秒表并采用 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