有人能解释一下 BASH 脚本中第 3 行和第 8 行的工作原理吗?我对这部分有点困惑。这是为了确定要使用哪个 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]}
答案1
第 3 行使用双括号,以确保它们之间的表达式被评估为算术表达式。$WEEK_NO % 2
返回除法的余数$WEEK_NO除以 2,所以结果总是0或者1,取决于$WEEK_NO(如果它是甚至,结果是0; 如果它是奇怪的,结果是1)。
USB_DRIVES 是一个索引数组,根据第 3 行的评估结果,在第 8 行检索其中一个值。
您可以查看man 1 bash
更多信息。相关信息位于算术评估和数组部分。
答案2
(( 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}
两者都允许,这里使用最后一个。此外,在数组中,您可以使用索引作为变量二。
答案3
答案4
第 3 行 ((...)) - 只是嵌入到 shell 中的整数数学运算。“%” - 是 MODULO/REMINDER 运算符,与返回除法整数部分的“/”互补。在您的情况下,第 3 行返回 0 或 1,具体取决于周数。然后该数字替换为设备名称 USBx - USB_0 或 USB_1。
似乎写在不同的闪存驱动器上的备份取决于偶数/奇数周数。