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]} 

在第3行使用双括号以确保它们之间的expression式被评估为算术expression式。 $WEEK_NO % 2返回$WEEK_NO % 2的余数,所以结果总是01 ,取决于$ WEEK_NO (如果是偶数 ,结果是0 ;如果是奇数 ,结果是1 )。

USB_DRIVES是一个索引数组,根据第3行的评估结果,在第8行检索其值。

你可以看看man 1 bash了解更多信息。 相关信息在算术评估数组部分。

 (( USB_NN_IDX = $WEEK_NO % 2 )) 

这个是用来计算的。 它将使USB_NN_IDX等于整数除法运算variablesWEEK_NO的其余部分为2。

 USB_NN=${USB_DRIVES[$USB_NN_IDX]} 

这个将根据USB_NN_INX值让USB_NNvariables等于USB_DRIVES[0]USB_DRIVES[1] USB_NN_INX 。 你可以在bash中使用任何实现来将下面的一个variables等同于另一个variables:

 A=$B A=${B} 

两者都允许,最后一个在这里使用。 另外在数组中,你可以使用索引作为variables二。

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

((USB_NN_IDX = $ WEEK_NO%2))

USB_NN_IDX设置为星期编号2,即0或1.此编号用作USB_NNarrays的索引。

第3行((…)) – 只是embedded到shell中的整数运算。 “%” – 是一个MODULO / REMINDER操作符,与返回整数部分除法的“/”互补。 在你的情况行3返回0或1取决于周编号。 然后将该数字代入设备名称USBx – USB_0或USB_1。

看起来像写在不同的闪存驱动器上的备份取决于偶数/奇数的周数。