Daniel183
Anmeldungsdatum: 9. Februar 2019
Beiträge: 31
|
Hi wieder ☺ Ich hab folgende Frage: Ich habe ein Array und eine Variable. Das Array lese ich mit Werten aus einem File ein: | count=datei.txt
anz=($(wc $count))
#
declare -a scount
scount=(`cat "$count"`)
|
und die Variable über read: | read -p $'\n\tBitte Eingabe:\t' rcount
|
Und jetzt möchte ich, dass ich wenn:
rcount in scount enthalten ist, ich das Echo bekomme:
"Ist da."
und wenn nicht, dann soll zurück kommen:
"Nicht da." Unter anderem habe ich es so versucht: | if [ $rcount != ${scount[@]} ]
then
echo "Nicht da."
else
echo "Ist da."
|
Aber das funktioniert natürlich auch nicht... Hat jemand eine Idee, wie man das machen kann? Danke für eure Hilfe ☺ MfG
Daniel
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Du musst alle Werte im Array mit dem Suchbegriff vergleichen, also z.B.:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | read -p $'\n\tBitte Eingabe:\t' search_value
readarray -t content < datei.txt
number_of_elements_in_array="${#content[@]}"
found=0
for element in "${content[@]}"
do
[ "$search_value" = "$element" ] && {found=1; break;}
done
if [ $found -eq 1 ]
then
echo "Ist da."
else
echo "Nicht da."
fi
|
Warum es dafür einen Array braucht, erschließt sich mir nicht - da reicht doch eigentlich eine Suche mit grep:
| read -p $'\n\tBitte Eingabe:\t' search_value
if grep -q "^$search_value$" datei.txt
then
echo "Ist da."
else
echo "Nicht da."
fi
|
|
Daniel183
(Themenstarter)
Anmeldungsdatum: 9. Februar 2019
Beiträge: 31
|
Oh man... Du hast natürlich recht...
grep reicht total aus... Weil ich das Array habe, weil ich es für was anderes noch brauche - dachte ich daran, den Wert damit zu vergleichen...und hab überhaupt nicht an grep gedacht... Danke - und sorry für die Verschwendung von wertvoller Zeit... MfG
Daniel, der sich schämend trollt...
|
Daniel183
(Themenstarter)
Anmeldungsdatum: 9. Februar 2019
Beiträge: 31
|
Ok Jetzt hab ich doch noch mal ein Problem... Ich suche jetzt mit grep - aber das Problem ist:
Die Variable die ich suche sieht so aus: Text Zahlenfolge [Text] Und diese []
sind so vorgegeben.
Ohne die kann ich nicht arbeiten, weil ich Daten aus einer REST API abrufe, die diese [] bei der Beschreibung braucht. Sprich:
Ich bekomme keine Daten, wenn [Text] nicht genau so dargestellt wird. Aber mit grep kann ich das natürlich so nicht abfragen zum Vergleich...
Hat da jemand eine Idee dafür? MfG
Daniel
|
Mooi
Anmeldungsdatum: 15. August 2014
Beiträge: 187
|
Wie wäre es mit:
\[Text\]
😉
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Daniel183 schrieb: Hat da jemand eine Idee dafür?
Wenn du grep mit dem Argument -F aufrufst, interpretiert es den Suchstring nicht als Regulären Ausdruck. Und mit -x statt dem "^$VARIABLE$" Ausdruck sucht es nach ganzen Zeilen, also z.B.:
| read -p $'\n\tBitte Eingabe:\t' search_value
if grep -q -x -F "$search_value" datei.txt
then
echo "Ist da."
else
echo "Nicht da."
fi
|
Ansonsten würde ich sowas lieber in einer Skriptsprache wie Python statt einer Shell machen, dann hat man das Problem erst gar nicht (und mit requests machen HTTP-Abfrage auch mehr Spaß als in der Shell).
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | #!/usr/bin/env python3
def search_file_interactively(search_term, myfile):
with open(myfile) as f:
for line in f:
if search_term == line.rstrip():
return True
if __name__ == "__main__":
search_term = input("\n\tBitte Eingabe:\t")
if search_file_interactively(search_term, "datei.txt"):
print("Ist da.")
else:
print("Nicht da.")
|
|
Daniel183
(Themenstarter)
Anmeldungsdatum: 9. Februar 2019
Beiträge: 31
|
Wie wäre es mit:
\[Text\]
😉
Ja, daran hab ich auch schon gedacht - aber das funktioniert nicht...
Ich gebe den Wert, den ich suche über read ein - und wenn ich da \[Test\] mache oder nicht - ändert nichts an der Ausgabe...
|
Daniel183
(Themenstarter)
Anmeldungsdatum: 9. Februar 2019
Beiträge: 31
|
Wenn du grep mit dem Argument -F aufrufst, interpretiert es den Suchstring nicht als Regulären Ausdruck.
Auch mit -F funktioniert es nicht... Hm
Ich speichere diese Daten aber in einem File. Also es ist tatsächlich nur ein File und in diesem File sind dann Werte drin.
Und ich will eigentlich nichts anderes, als prüfen:
"Ist dieser spezielle Wert in diesem speziellen File oder nicht?" Das ist alles...
☹
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Daniel183 schrieb: Wenn du grep mit dem Argument -F aufrufst, interpretiert es den Suchstring nicht als Regulären Ausdruck.
Auch mit -F funktioniert es nicht...
Siehe meine Ergänzung im obigen Post - ^ und $ für Zeilenanfang und -ende dürfen dann natürlich nicht mehr vorkommen, stattdessen kann man -x nutzen, wenn die ganze Zeile gematcht werden soll.
|
Daniel183
(Themenstarter)
Anmeldungsdatum: 9. Februar 2019
Beiträge: 31
|
Das stimmt...das hab ich jetzt auch gemacht seahawk1986 ☺ Und das grep klappt wunderbar - danke dafür ☺ Was nicht klappt ist leider die Übergabe an die REST API ☹ Ich übergebe diese Variable an die REST um einen dazugehörigen Wert in ein File zu schreiben - aber die Ausgabe sagt:
curl: (3) [globbing] bad range in column 63
Aber ich hab meine Variable $uebergabe schon in "" stehen...
Anfangs dachte ich, dass es an den Leerzeichen liegt - aber durch die "" dürfte das doch eigentlich nichts ausmachen oder?
Bei einem Echo "$uebergabe" bekomme ich auch den richtigen Variablen-Inhalt zurück...
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Zeig doch mal den Code für das Zusammenbauen der URL und den curl-Aufruf und welche URL da eigentlich erwartet wird.
|
Daniel183
(Themenstarter)
Anmeldungsdatum: 9. Februar 2019
Beiträge: 31
|
Logisch
Sorry... | curl -X GET "https://"$server"/"$name"/services/"$uebergabe -H "accept: */*" -H 'Authorization: Basic '$rest -H "Content-Type: application/json" | jq '.' | grep auslesewert | cut -c 20-50 | tr -d '",' > text.txt
|
Es funktioniert mit allen - also ich verwende das, um verschiedene Dinge auszulesen...und es klappt mit allem, nur nicht mit dem aktuellen Fall.
Ich vermute, dass es an den Leerzeichen liegt... Danke für deine umfangreiche Hilfe ☺
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Leerzeichen und sonstige spezielle Zeichen in der URL müssen für den HTTP-Request encodiert werden (vgl. URL-Encoding) - also musst du " " durch "%20" (oder "+", je nachdem, was der Server erwartet) ersetzen usw. Und die URL würde ich vollständig quoten:
| curl -X GET "https://${server}/${name}/services/${uebergabe}"
|
|
Daniel183
(Themenstarter)
Anmeldungsdatum: 9. Februar 2019
Beiträge: 31
|
Danke ☺ Entschuldige - ich war jetzt ein paar Tage nicht da und hab das jetzt grad gemacht... | gurl=$( php -r "echo urlencode('$eingabe');"; )
|
und das klappt einwandfrei jetzt ☺ Die Sache mit awk hab ich so gelöst: | rest=`cat $ugpfad/rest.conf | awk "/$ugname/"' { print $2 }'`
|
Danke für eure Hilfe ☺ MfG
Daniel
|