Tìm thấy một kịch bản trên cron.monthly của tôi, tôi tự hỏi nó đang làm gì?


3

Tôi chưa quen với lập trình bash, xin lỗi nếu đây có thể là một loại câu hỏi ngu ngốc. Tôi đã tìm thấy một tập lệnh trên máy chủ của mình và tôi đang cố gắng hiểu từng dòng:

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

Một số điều tôi không hiểu như

set -e

Tôi đọc về nó, rằng nó "kiểm tra" các lệnh của bạn. Vì vậy, nó đưa ra cảnh báo hoặc một ngoại lệ nếu có sự cố? Hoặc một báo cáo lỗi chi tiết hơn?

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

Điều tôi không hiểu là các lệnh "-d" hoặc "-x" tại mệnh đề if, imho có gì đó bị thiếu ở đó.

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

Tôi không hiểu phần cuối cùng, lý do của việc "HOẶC THẬT" này là gì.

Có lẽ ai đó có thể giúp tôi?

tia && liên quan đến noircc

Câu trả lời:


2

set -e # Thoát ngay lập tức nếu lệnh thoát với trạng thái khác không.

Tùy chọn -d trong kiểm tra if là đúng nếu đường dẫn là một thư mục. ! phủ nhận bài kiểm tra.

    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

Về chown man:root /var/cache/man || true- mã bên phải của | | được hành động nếu lệnh chown trước trả về trạng thái thoát khác không. Nếu lệnh chown thất bại, true được ước tính. Điều này là để ngăn chặn tập lệnh không thành công - nếu không, trạng thái lỗi không phải là số 0 sẽ thoát khỏi tập lệnh do tập -e.


3

Trong bash, -dkhóa chuyển là "kiểm tra xem thư mục có tồn tại không" và -xđể kiểm tra tệp. Set -ethông báo kịch bản để thoát nếu có bất kỳ lệnh nào bị lỗi (nghĩa là thoát với trạng thái khác không).

Việc || truengăn chặn một phản ứng khác không từ chown (nếu lệnh thất bại).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.