请有人可以解释一下,我是否有点困惑的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的余数,所以结果总是0或1 ,取决于$ 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。
看起来像写在不同的闪存驱动器上的备份取决于偶数/奇数的周数。