我有一个小脚本(基本上很简单--这是我写的第一个脚本),并且喜欢知道经过的时间,完成它需要多长时间。
有可能计算这两个变量之间的差异吗?($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 "****************************************************************************"发布于 2021-05-02 16:25:38
脚本的问题与命令的时间无关。您的脚本的问题是它运行在一个与从命令行运行它的环境不同的环境中。
例如,PATH变量可能是不同的,导致找不到一些实用程序,或者脚本的交互元素在非交互环境中运行时显然无法执行。
您还提到在评论中使用sh而不是bash启动脚本,这意味着SECONDS变量可能不存在(取决于由哪个shell sh实现)。
我可以看到,脚本使用sudo执行几乎所有的命令。这使我建议您应该在root自己的crontab中运行脚本,而不是在非特权用户帐户的crontab中运行脚本(并从脚本中删除所有sudo调用)。使用sudo crontab -e修改根用户的crontab。
此外,确保脚本中的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是文件的第一行(如我在示例中所示)。问题中的代码不是这样做的。注意,如果在调用脚本时在命令行上使用显式解释器,则#!-line将被完全忽略。
https://unix.stackexchange.com/questions/647692
复制相似问题