Como esta parte de um script BASH funciona?

1

Por favor, alguém poderia explicar como as linhas 3 e 8 funcionam nesta parte de um script BASH com o qual estou um pouco confuso? É descobrir qual unidade USB usar para um backup. Muito obrigado.

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]}
    
por sixnumber 28.06.2012 / 13:12

4 respostas

3

Na linha 3, os parênteses duplos são usados para garantir que a expressão entre eles seja avaliada como expressão aritmética. $WEEK_NO % 2 retorna o restante da divisão de $ WEEK_NO por 2, então o resultado é sempre 0 ou 1 , dependendo do > $ WEEK_NO (se for par , o resultado é 0 ; se for ímpar , o resultado é 1 ).

USB_DRIVES é uma matriz indexada e, dependendo do resultado da avaliação na linha 3, na linha 8, um de seus valores é recuperado.

Você pode ver man 1 bash para mais informações. As informações relevantes estão nas seções ARITHMETIC EVALUATION e Arrays .

    
por 28.06.2012 / 13:28
1
(( USB_NN_IDX = $WEEK_NO % 2 ))

Este é usado para cálculo. Ele permitirá que USB_NN_IDX seja igual ao restante de uma variável de operação de divisão inteira WEEK_NO para 2.

USB_NN=${USB_DRIVES[$USB_NN_IDX]}

Este permitirá que a variável USB_NN seja igual a uma das USB_DRIVES[0] ou USB_DRIVES[1] , dependendo do valor USB_NN_INX . Você pode usar qualquer implementação no bash para igualar uma variável a outra do seguinte:

A=$B
A=${B}

ambos são permitidos e o último é usado aqui. Também na matriz, você pode usar o índice como variável dois.

    
por 28.06.2012 / 13:29
1

A notação (()) é uma abreviação de let , leia mais aqui . Então:

((USB_NN_IDX = $ WEEK_NO% 2))

Define USB_NN_IDX para módulo 2 do número da semana, ou seja, 0 ou 1. Esse número é usado como um índice na matriz USB_NN .

    
por 28.06.2012 / 13:31
1

Linha 3 ((...)) - é apenas um número inteiro de matemática embutido no shell. "%" - é um operador MODULO / LEMBRETE, complementar ao "/" que retorna parte inteira da divisão. No seu caso, a linha 3, retorno 0 ou 1, depende do número da semana. Em seguida, esse número é substituído no nome do dispositivo USBx - USB_0 ou USB_1.

Parece que os backups escritos em drives flash diferentes dependem do número de semana par / ímpar.

    
por 28.06.2012 / 13:42