我是 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
告诉脚本在任何命令失败时退出(即以非零状态退出)。
阻止|| true
chown 发出非零响应(如果命令失败)。