Como eu escrevo uma atribuição condicional em um script Linux?

1

Eu preciso criar uma fórmula em um script de shell do Linux. Se fosse o DOS, eu (provavelmente) estaria bem, mas fiz a mudança e preciso aprender ....!

D1 = um número de 5 dígitos entre 40500 e 49500 (dados da pressão atmosférica de um relatório SYNOP do aeroporto)

D2 = os últimos quatro dígitos de D1 (eu posso fazer isso)

D3 = o primeiro dígito de D2 (eu também posso fazer isso)

D4 será D2 dividido por 10, ao qual 1000 é adicionado apenas se D3 = 0.

Estou procurando algo como: IF D3 = 0 ENTÃO D4 = ((D2 / 10) +1000) ELSE D4 = (D2 / 10)

Obrigado Nigel.

    
por user277524 13.12.2013 / 12:37

1 resposta

3

Você já diminuiu bastante, e isso está apenas relacionado a pequenos problemas de sintaxe.

O que você tem, no pseudocódigo, é basicamente isso:

if d3 equals 0 then
    set d4 equal to ((d2/10)+1000)
else
    set d4 equal to (d2/10)
end if

que se traduz em, no bash (que é o que você mais provavelmente usaria para scripts de shell no Linux):

if test "$d3" -eq "0"; then
    d4=$(( ( $d2 / 10 ) + 1000 ))
else
    d4=$(( $d2 / 10 ))
fi

Você precisa do fi para finalizar a instrução if e $(( ... )) é a expansão aritmética no bash. Note que $( ... ) é completamente diferente, que é substituição de processo que pega a saída do comando dado e a retorna. Altamente útil, mas não exatamente o que você está procurando aqui.

O acima assume que $d2 , $d3 e $d4 já estão definidos para os valores corretos e que não há variáveis de ambiente com nomes conflitantes definidos.

Se você sabe por um fato que $d3 nunca conterá nada além de dígitos, você pode acabar com as citações nos parâmetros para test , mas eu gosto de mantê-lo como um internet Segura. Para saber mais sobre o que você pode fazer com test (no bash), dê uma olhada em man bash sob o cabeçalho Comandos internos do Shell . Outros shells podem usar o comando externo, caso em que man test se aplica (você pode usar o comando externo no bash, por exemplo, através de if command test ...; then , se preferir, por algum motivo).

O ponto-e-vírgula antes do then é necessário porque then é realmente um comando separado no bash; você também pode colocar then em uma linha separada e omitir o ponto-e-vírgula, que é outra maneira de formatar exatamente a mesma coisa.

    
por 13.12.2013 / 13:05