leia a primeira linha do arquivo e compare-a com uma string no arquivo shell

leia a primeira linha do arquivo e compare-a com uma string no arquivo shell

Preciso ler a primeira linha de um arquivo e combiná-la com um texto. Se o texto corresponder, preciso fazer determinada operação.

O problema é se o comando não consegue comparar a variável com a string.

file_content=$(head -1 ${file_name})
echo $file_content
if [[ $file_content = 'No new data' ]]; then
    echo "Should come here"
fi
echo $file_content
if [ "${file_content}" = "No new data" ]; then
  echo "Should come here"
fi

O bloco if não está funcionando. Acho que o valor que estou capturando na linha 1 tem alguns problemas.

Responder1

Muito provavelmente a primeira linha contém caracteres não imprimíveis ou espaços em branco à esquerda ou à direita ou caracteres em branco diferentes de espaço (você esqueceu de citar a variável quando passada para echo). Você também pode limpá-lo primeiro:

content=$(
  sed '
    s/[[:space:]]\{1,\}/ /g; # turn sequences of spacing characters into one SPC
    s/[^[:print:]]//g; # remove non-printable characters
    s/^ //; s/ $//; # remove leading and trailing space
    q; # quit after first line' < "$file_name"
)

if [ "$content" = 'No new data' ]; then
  echo OK
fi

informação relacionada