Пожалуйста, не могли бы кто-нибудь объяснить, как строки 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.
Похоже, что резервные копии, записанные на разные флешки, зависят от четного / нечетного номера недели.