
Ich möchte ein Bash-Skript erstellen, das alle Wörter findet, die mit dem vom Benutzer eingegebenen Buchstaben in einer angegebenen Datei beginnen (im Skript angegeben oder auch durch Erstellen einer Benutzereingabe dafür). Ich bin ein bisschen mehr als ein absoluter Anfänger in Linux, mein Code lautet:
#! /bin/bash
echo 'Please enter starting letter of Name'
read name
result=$(awk '/$name/ {print}' /home/beka/scripts/names.txt)
echo "$(result)"
Dies führt zu einem Fehler wie:
Please enter starting letter of Name
G
/home/beka/scripts/test.sh: line 6: result: command not found
was mache ich falsch? Ich habe versucht, nach Awk-Beispielen zu suchen, kann aber keine genaue Lösung finden. Vielen Dank im Voraus.
BEARBEITETER CODE
#! /bin/bash
echo 'Please enter starting letter of Name'
read name
if [[ $name == [A-Z] ]]
then
awk "/$name/{print}" /home/beka/scripts/names.txt
else
echo '0'
fi
EDIT names.txt ist eine Liste von Namen
Michael
Christopher
Jessica
Matthew
Ashley
Jennifer
Joshua
EINE WEITERE BEARBEITUNG
#! /bin/bash
echo 'Please enter starting letter (Uppercase) of name'
read name
if [[ $name == [A-Z] ]]
then
echo "---Names starting with $name---"
awk "/$name/{print}" /home/beka/scripts/names.txt
elif [[ $name == [a-z] ]]
then
awk "/$name/{print}" /home/beka/scripts/names.txt
else
echo '---------'
echo 'Names not found'
fi
Antwort1
echo "$(result)"
versucht, einen Befehl mit dem Namen „ result
Mit freundlicher Genehmigung des $(result)
Teils“ auszuführen, daher die Fehlermeldung result: command not found
.
Versuchen Sie Folgendes (ungetestet):
#!/usr/bin/env bash
result=''
while [[ -z "$result" ]]; do
echo 'Please enter starting letter of Name'
read name
if [[ $name == [A-Z] ]]
then
result=$(awk -v name="$name" 'index($0,name)==1' /home/beka/scripts/names.txt)
else
echo '0'
fi
done
echo "$result"
So machen Sie die Suche unabhängig von Groß- und Kleinschreibung:
awk -v name="$name" 'index(tolower($0),tolower(name))==1' /home/beka/scripts/names.txt
Natürlich müssen Sie auch $name == [A-Z]
auf $name == [a-zA-Z]
oder umstellen $name == [[:alpha:]]
, wenn Sie Kleinbuchstaben als Suchzeichen akzeptieren möchten.