我有一个小脚本(基本上非常简单,这是我写的第一个)并且喜欢知道经过的时间,完成时需要多长时间。
是否可以计算两个变量之间的差异? ($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
,这还意味着该变量可能不存在(取决于执行的SECONDS
shell )。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-get
pihole
command -v pihole
command -v apt-get
还要确保 -line#!
是文件的第一行(如我在示例中所示)。问题中的代码没有这样做。请注意 -#!
行被完全忽略如果调用脚本时在命令行上使用显式解释器。