3

Я новичок в 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

Что я не понимаю, так это команды "-d" или "-x" в предложении if, imho, там чего-то не хватает.

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

Я не понимаю последнюю часть, в чем причина этого "ИЛИ ИСТИНА".

Может кто-нибудь может мне помочь?

tia && regards noircc

2 ответа2

3

В bash ключ -d - это проверка, существует ли каталог, а -x - для проверки файлов. Set -e указывает сценарию выйти, если какая-либо команда не выполнена (т.е. завершить работу с ненулевым состоянием).

|| true предотвращает ненулевой ответ от chown (если команда не выполнена).

2

set -e # Выйти немедленно, если команда выходит с ненулевым статусом.

Параметр -d в тесте if равен true, если путь является каталогом. ! отменяет тест

    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. Это необходимо для предотвращения сбоя скрипта - в противном случае выбранное ненулевое состояние ошибки выйдет из скрипта из-за установки -e.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .