
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