Ich möchte in einer Datei nach einer Zeichenfolge suchen und habe nach langem Suchen auf dieser Website schließlich die Anweisung grep
in 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 -x
vor 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 $string1
wie 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
[..]