Tanto quanto eu posso ver, você não tem nenhum array no seu código. A variável msgNumbers
é uma string que contém a saída do seu comando cut
.
Para iterar a saída de cut
, use
#!/bin/bash
mailx -H | grep '^ [UN]' | cut -c 4-5 |
while read msg; do
print 'msg = %s\s' "$msg"
done
Isso envia a saída de cut
para o loop while
imediatamente a seguir, através do pipe ( |
). O loop while
irá iterar com msg
definido para cada linha individual de saída de cut
.
O cut
obtém seus dados diretamente do comando grep
, o que elimina a necessidade de armazenar os dados em um arquivo intermediário.
Eu removi o comando echo $msg|mailx;
porque não fazia muito sentido para mim (o utilitário mailx
precisa de um endereço para enviar os dados).
O grep
+ cut
também pode ser substituído por uma única chamada para awk
, onde permitimos que awk
faça o trabalho de ambas as ferramentas e imprima a segunda coluna delimitada por espaços em branco quando a expressão regular corresponder a:
#!/bin/bash
mailx -H | awk '/^ [UN]/ { print $2 }' |
while read msg; do
print 'msg = %s\s' "$msg"
done
Não estou comentando mais sobre o uso de mailx
, pois é um utilitário não padrão que é implementado de forma ligeiramente diferente nos sistemas Unix (por exemplo, minha versão não possui a opção -H
).
A linha #!
parece ok para mim, se você quiser que o script seja executado por bash
e se o executável bash
estiver localizado nesse caminho (que normalmente está nos sistemas Linux, por exemplo, mas verifique com command -v bash
em seu sistema para ter certeza). O código que eu postei acima é compatível com /bin/sh
, então bash
não é realmente necessário para executá-lo (seria executado em qualquer shell sh
-like).
Apenas certifique-se de que o script seja executável e que você o execute sem especificar um intérprete explícito.