Corresponde valores hexadecimais em uma declaração de caso

1

Estou tentando corresponder os códigos de saída de um processo que está documentado para retornar códigos de saída hexadecimais (por exemplo, 0x00 para sucesso, 0x40 - 0x4F no erro do usuário, 0x50 - 0x5F no erro interno etc.). Gostaria de lidar com o código de saída por meio de uma instrução case , mas a solução "óbvia" não corresponde:

$ $val = 10

$ case $val in
>   0xA) echo match;;
>   *) echo no match;;
> esac
no match

Existe uma maneira legível de combinar valores hexadecimais em uma instrução case ?

    
por dimo414 14.07.2015 / 00:50

3 respostas

0

Sim, o operador aritmético dos dois parênteses exibirá valores hexadecimais como decimal, deixando case combiná-los.

$ echo $((0xA))
10

$ case $val in
>   $((0xA))) echo match;;
>   *) echo no match;;
> esac
match
    
por 14.07.2015 / 00:50
0

Você poderia printf o valor para uma string hexadecimal:

case $(printf '%02x' $val) in
    0a) echo match;;
     *) echo no match;;
esac

Isso permitirá que você corresponda a todas as classes de erro do seu aplicativo:

case $(printf '%02x' $?) in
    00) echo success;;
    4?) echo user error;;
    5?) echo internal error;;
     *) echo unrecognised error;;
esac
    
por 14.07.2015 / 13:31
0

Se o processo retornar a string 0x0A, o seu caso falhará usando 0xA. Se estiver realmente usando números, você deve usar 10 em lugar.

    
por 16.07.2015 / 00:38

Tags