Primeiras coisas primeiro:
if [ "$temp" == " " ]
O operador de comparação é, na verdade, =
, não ==
. O último funciona em alguns shells, mas não é padrão. Além disso, você está comparando a variável não contra uma string vazia, mas uma contendo um único espaço, que pode ou não ser o que seu arquivo possui.
Se o arquivo puder conter espaço em branco extra, convém remover tudo com sed
ou tr
. E então você pode usar apenas [ -z "$temp" ]
para testar se está vazio. Então:
temp=$(head -5 $filename | tail -1 | tr -d ' \t\r')
if [ -z "$temp" ] ; then ...
Em vez de head
e tail
, você pode usar sed
para escolher uma única linha:
temp=$(sed -n '5p' | tr -d ' \t\r')
if [ -z "$temp" ] ; then ...
( 5p
significa "na linha 5, (p) retira a linha", e -n
inibe a ação padrão de imprimir qualquer linha.)
Na verdade, em vez do teste, estou um pouco tentado a percorrer o arquivo com um script awk
para obter a quinta ou sexta linha, dependendo se o quinto tiver alguma coisa:
temp=$(tr -d ' \t\r' < $filename1 | awk '(NR==5 && $0) || NR==6 {print; exit}' )
( NR==5
testa o número da linha atual (registro), $0
expande para o conteúdo da linha e é "verdadeiro" se a linha não estiver vazia, &&
e ||
são usuais < em> e e ou operações)