erste Zeile der Datei lesen und mit einem String in der Shell-Datei vergleichen

erste Zeile der Datei lesen und mit einem String in der Shell-Datei vergleichen

Ich muss die erste Zeile einer Datei lesen und sie mit einem Text abgleichen. Wenn der Text übereinstimmt, muss ich eine bestimmte Operation ausführen.

Das Problem besteht darin, dass der Befehl die Variable nicht mit der Zeichenfolge vergleichen kann.

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

Der if-Block funktioniert nicht. Ich glaube, der Wert, den ich in Zeile 1 erfasse, weist einige Probleme auf.

Antwort1

Höchstwahrscheinlich enthält die erste Zeile nicht druckbare Zeichen oder führende oder nachfolgende Leerzeichen oder andere Leerzeichen als Leerzeichen (Sie haben vergessen, die Variable bei der Übergabe an in Anführungszeichen zu setzen echo). Sie könnten sie auch zuerst bereinigen:

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

verwandte Informationen