在我的 cron.monthly 上发现了一个脚本,我想知道它在做什么?

在我的 cron.monthly 上发现了一个脚本,我想知道它在做什么?

我是 Bash 编程的新手,如果这个问题有点愚蠢,请见谅。我在服务器上找到了一个脚本,并试图理解其中的每一行:

#!/bin/sh
#
# man-db cron weekly

set -e

if ! [ -d /var/cache/man ]; then
    # Recover from deletion, per FHS.
    mkdir -p /var/cache/man
    chown man:root /var/cache/man || true
    chmod 2755 /var/cache/man
fi

# regenerate man database
if [ -x /usr/bin/mandb ]; then
# --pidfile /dev/null so it always starts; mandb isn't really a daemon,
# but we want to start it like one.
start-stop-daemon --start --pidfile /dev/null \
          --startas /usr/bin/mandb --oknodo --chuid man \
          -- --quiet
fi

exit 0

有些事情我不明白,比如

set -e

我读到过,它会“检查”你的命令。所以如果出现问题,它会发出警告或异常吗?还是更详细的错误报告?

if ! [ -d /var/cache/man ]; then OR
if [ -x /usr/bin/mandb ]; then

我不明白的是 if 子句中的“-d”或“-x”命令,我认为那里缺少了一些东西。

chown man:root /var/cache/man || true

我不明白最后一部分,这个“OR TRUE”的原因是什么。

也许有人可以帮助我?

tia && 问候 noircc

答案1

set -e # 如果命令以非零状态退出,则立即退出。

如果路径是目录,则 if 测试中的 -d 选项为真。!否定测试。

    if ! [ -d /var/cache/man ]  # true if /var/cache/man is not a directory
    if [ -x /usr/bin/mandb ]    # true if /usr/bin/mandb is executable

关于chown man:root /var/cache/man || true- 如果前面的 chown 命令返回非零退出状态,则执行 || 右侧的代码。如果 chown 命令失败,则评估 true。这是为了防止脚本失败 - 否则 chown 非零错误状态会因为 set -e 而退出脚本。

答案2

在 bash 中,-d开关是“检查目录是否存在”并-x用于检查文件。Set -e告诉脚本在任何命令失败时退出(即以非零状态退出)。

阻止|| truechown 发出非零响应(如果命令失败)。

相关内容