Verwenden von grep und if-Anweisungen im Shell-Skript

Verwenden von grep und if-Anweisungen im Shell-Skript

Ich möchte in einer Datei nach einer Zeichenfolge suchen und habe nach langem Suchen auf dieser Website schließlich die Anweisung grepin und verwendet if. Allerdings funktioniert es nicht wie erwartet, obwohl ich alle Anweisungen befolgt habe, die ich in anderen verwandten Beiträgen gefunden habe. Hier ist mein Code.

echo "Enter dicounter number"
read string1
echo "Enter side with LEDs"
read string2

if grep -q "dicounter_$string1_from_$string2" MasterFile.txt; then
   echo "dicounter_$string1_from$string2 already exists in MasterFile."
else
   { (a bunch of stuff to make the transmitter operate) }
fi

Das Hauptproblem liegt meiner Meinung nach in der Art und Weise, wie ich meine Befehlszeilenargumente einlese.

Antwort1

Wenn ein Skript nicht wie erwartet funktioniert, sollten Sie zunächst versuchen, set -xvor der problematischen Stelle im Code (in diesem Fall vor dem grep) Folgendes hinzuzufügen und das Skript auszuführen. Sie werden dann sehen, was das Skript istGenau genommentun, damit Sie das mit dem vergleichen können, was Sieerwartenes zu tun.

In Ihrem Fall könnte das Problem darin bestehen, dass es _sich um ein gültiges Zeichen in Variablennamen handelt, sodass Sie versuchen, den Wert von zu verwenden, $string1_from_anstatt $string1wie erwartet. Aus diesem Grund ist es eine gute Praxis, Ihre Variablennamen in geschweifte Klammern einzuschließen, auch wenn Sie keine ausgefallenen Manipulationen verwenden. Beispiel:

if grep -q "dicounter_${string1}_from_${string2}" MasterFile.txt; then
   echo "dicounter_${string1}_from${string2} already exists in MasterFile."
else
   [..]

verwandte Informationen