Назад | Перейти на главную страницу

Как работает эта часть сценария BASH?

Пожалуйста, не могли бы кто-нибудь объяснить, как строки 3 и 8 работают в этой части сценария BASH, с которым я немного запутался? Нужно решить, какой USB-накопитель использовать для резервного копирования. Большое спасибо.

1 WEEK_NO=`date +%U | sed -e 's/^0\+//g'`
2
3 (( USB_NN_IDX = $WEEK_NO % 2 ))
4
5 USB_DRIVES[0]="usb03"
6 USB_DRIVES[1]="usb04"
7
8 USB_NN=${USB_DRIVES[$USB_NN_IDX]}

В строке 3 двойные скобки используются для того, чтобы гарантировать, что выражение между ними оценивается как арифметическое выражение. $WEEK_NO % 2 возвращает остаток от деления $ WEEK_NO на 2, поэтому результат всегда 0 или 1, в зависимости от $ WEEK_NO (если это четный, результат 0; если это странный, результат 1).

USB_DRIVES - это индексированный массив, и в зависимости от результата оценки в строке 3, в строке 8 извлекается одно из его значений.

Вы можете посмотреть на man 1 bash Чтобы получить больше информации. Соответствующая информация находится в АРИФМЕТИЧЕСКАЯ ОЦЕНКА и Массивы разделы.

(( USB_NN_IDX = $WEEK_NO % 2 ))

Этот используется для расчета. Это позволит USB_NN_IDX равно остатку от переменной операции целочисленного деления WEEK_NO к 2.

USB_NN=${USB_DRIVES[$USB_NN_IDX]}

этот позволит USB_NN переменная, равная одному из USB_DRIVES[0] или USB_DRIVES[1] в зависимости от USB_NN_INX стоимость. Вы можете использовать любую реализацию в bash для приравнивания одной переменной к другой из следующих:

A=$B
A=${B}

оба разрешены, и здесь используется последний. Также в массиве вы можете использовать индекс как переменную два.

Обозначение (()) является сокращением для let, читать далее Вот. Так:

((USB_NN_IDX = $ WEEK_NO% 2))

Наборы USB_NN_IDX к по модулю 2 номера недели, то есть 0 или 1. Это число используется как индекс в USB_NN массив.

Строка 3 ((...)) - это просто целочисленная математика, встроенная в оболочку. «%» - это оператор MODULO / REMINDER, дополняющий «/», возвращающий целую часть деления. В вашем случае строка 3 возвращает 0 или 1, в зависимости от номера недели. Затем этот номер подставляется в имя устройства USBx - USB_0 или USB_1.

Похоже, что резервные копии, записанные на разные флешки, зависят от четного / нечетного номера недели.