BASH 脚本的这一部分如何工作?

BASH 脚本的这一部分如何工作?

有人能解释一下 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_NO2。

USB_NN=${USB_DRIVES[$USB_NN_IDX]}

这个会让USB_NN变量等于USB_DRIVES[0]USB_DRIVES[1]取决于USB_NN_INX值之一。您可以使用 bash 中的任何实现来将一个变量等于另一个变量,如下所示:

A=$B
A=${B}

两者都允许,这里使用最后一个。此外,在数组中,您可以使用索引作为变量二。

答案3

(( )) 符号是 的简写let,阅读更多这里。 所以:

((USB_NN_IDX = $WEEK_NO%2))

设置USB_NN_IDX模数2 周数,即 0 或 1。此数字用作数组的索引USB_NN

答案4

第 3 行 ((...)) - 只是嵌入到 shell 中的整数数学运算。“%” - 是 MODULO/REMINDER 运算符,与返回除法整数部分的“/”互补。在您的情况下,第 3 行返回 0 或 1,具体取决于周数。然后该数字替换为设备名称 USBx - USB_0 或 USB_1。

似乎写在不同的闪存驱动器上的备份取决于偶数/奇数周数。

相关内容