已用时间计数

已用时间计数

我有一个小脚本(基本上非常简单,这是我写的第一个)并且喜欢知道经过的时间,完成时需要多长时间。

是否可以计算两个变量之间的差异? ($SSS 和 $EEE),我也尝试过使用 $SECONDS,但结果为 0。

可能需要使用不同的方式来完成这项工作,所以我需要如何解决这个问题。

我的脚本:

echo "****************************************************************************"
SECONDS=0
#!/bin/bash
SSS=$(date '+%Y.%m.%d. @ %H:%M:%S')
echo "Start time: ${SSS}"
echo ""
echo "Starting update and upgrade"
echo "==================================="
sudo apt-get update && sudo apt-get upgrade -y
echo ""
echo "Starting autoremove"
echo "==================================="
sudo apt-get autoremove -y
echo ""
echo "Starting autoclean"
echo "==================================="
sudo apt-get autoclean -y
echo ""
echo "Check for Pi-Hole update"
echo "==================================="
sudo pihole -up
echo ""
echo "Starting gravity update for Pi-Hole"
echo "==================================="
sudo pihole -g
echo ""
EEE=$(date '+%Y.%m.%d. @ %H:%M:%S')
echo "Start time: ${SSS}"
echo "End   time: ${EEE}"
duration=$SECONDS
echo "Elapsed time $(($duration / 60)) minutes and $(($duration % 60)) seconds."
echo "****************************************************************************"

答案1

您的脚本问题与命令的时间无关。您的脚本的问题在于它运行的环境与您从命令行运行它的环境不同。

例如,PATH变量可能不同,导致某些实用程序找不到,或者脚本中有交互元素,当脚本在非交互环境中运行时,这些交互元素显然无法执行。

你还提到在评论中sh您使用而不是启动脚本bash,这还意味着该变量可能不存在(取决于执行的SECONDSshell )。sh

我可以看到该脚本几乎使用sudo.这让我建议您应该在 root 自己的 crontab 中运行脚本,而不是在非特权用户帐户的 crontab 中运行(并sudo从脚本中删除所有调用)。使用 修改 root 用户的 crontab sudo crontab -e

此外,请确保PATH脚本中的变量设置为目录列表,以便您可以找到您使用的所有实用程序。例如,

#!/bin/bash

PATH=/bin:/usr/bin:/usr/local/bin:$PATH

SECONDS=0

apt-get update && apt-get upgrade

# etc.

您应该特别确保变量包含和PATH所在的目录(在命令行上使用和查找这些目录)。apt-getpiholecommand -v piholecommand -v apt-get

还要确保 -line#!是文件的第一行(如我在示例中所示)。问题中的代码没有这样做。请注意 -#!被完全忽略如果调用脚本时在命令行上使用显式解释器。

相关内容