Verificando se uma das 4 variáveis começa com string & red em ksh

0

Estou tentando verificar se uma das quatro variáveis começa com a string "& red" e estou com dificuldades para fazer a correspondência funcionar. No momento eu tenho isso,

if [[ $filemsgCICS = "&red"* || $filemsgCICSU1 = "&red"* || $snufmsgCICS = "&red"* || $snufmsgCICSU1 = "&red"* ]];then

mas isso não funciona. Não consigo encontrar uma solução que funcione. Eu tentei '& red' * e já tentei \ & red * mas nenhum deles funciona.

    
por dazedandconfused 01.11.2013 / 11:51

2 respostas

1

Você pode usar a sintaxe $ {variable: offset: length} para obter partes de suas variáveis assim:

if [[ ${filemsgCICS:0:4} = "&red" || ${filemsgCICSU1:0:4} = "&red" || \
  ${snufmsgCICS:0:4} = "&red" || ${snufmsgCICSU1:0:4} = "&red" ]]; then

Editar: Meu comentário sobre * não estar de acordo com [[]] estava errado. Seu método também deve ter funcionado se as variáveis contiverem o texto como esperado. Então, isso é apenas uma maneira alternativa.

    
por 01.11.2013 / 12:07
1

Você pode usar awk e for loop:

matched=0
for var in "$filemsgCICS" "$filemsgCICSU1" "$snufmsgCICS" "$snufmsgCICSU1";do
   if [ ! -z "$(printf "%s\n" "$var" | awk '/^\&red/')" ]; then
       matched=1
       break
   fi
done
if [ "$matched" -eq 1 ]; then
   # do stuff...
fi

Isso alcança a semântica OR lógica quebrando o loop na primeira variável correspondente. Você ainda pode conseguir isso usando awk e algo como

if    [ ! -z "$(printf "%s\n" "$filemsgCICS" | awk ...)" ]\
   || [ ! -z "$(printf "%s\n" "$filemsgCICSU1" ...

mas usar o loop torna-o mais legível e mais fácil de manter na minha opinião.

    
por 01.11.2013 / 13:05

Tags