Znalazłem skrypt na moim cronie. Co miesiąc zastanawiam się, co on robi?

3

Jestem nowy w programowaniu bash, przepraszam, jeśli to może być głupie pytanie. Znalazłem skrypt na moim serwerze i staram się zrozumieć każdą linię:

#!/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

Niektóre rzeczy, których nie rozumiem

set -e

Czytam o tym, że „sprawdza” twoje polecenia. Czyli daje ostrzeżenia lub wyjątek, jeśli coś pójdzie nie tak? Lub bardziej szczegółowy raport o błędach?

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

To, czego nie rozumiem, to polecenia „-d” lub „-x” w klauzuli if, imho czegoś tam brakuje.

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

Nie rozumiem ostatniej części, co jest przyczyną tego „OR PRAWDY”.

Może ktoś może mi pomóc?

tia i& pozdrowienia noircc

noircc
źródło

Odpowiedzi:

2

set -e # Wyjdź natychmiast, jeśli polecenie zakończy się ze statusem niezerowym.

Opcja -d w teście if jest prawdą, jeśli ścieżka jest katalogiem. ! neguje test.

    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

Odnośnie chown man:root /var/cache/man || true- kod po prawej stronie || jest wykonywane, jeśli poprzednie polecenie chown zwraca niezerowy status wyjścia. Jeśli polecenie chown nie powiodło się, wartość true jest obliczana. Zapobiega to awarii skryptu - w przeciwnym razie status niezerowego błędu wyprowadziłby skrypt ze względu na zestaw -e.

podejrzenie
źródło
3

W bash -dprzełącznik służy do sprawdzania, czy katalog istnieje i -xsłuży do sprawdzania plików. Set -emówi skryptowi, aby zakończył działanie, jeśli któreś polecenie nie powiedzie się (tj. wyjdzie ze stanu niezerowego).

|| trueZapobiega niezerowy odpowiedź chown (jeżeli polecenie nie).

Nathan C.
źródło