Ich versuche, eine Benutzereingabe, bis die Eingabe/Namen Schleife zu bekommen, ist einzigartig (nicht in der Ausgabe/Variablen enthalten).Bash Benutzereingabe während nicht variable Schleife passen
Ich habe versucht, so etwas zu tun, was ich dachte, würde gearbeitet haben:
read -p "$QlabelName" input
while [[ "$input" == "$(/usr/sbin/networksetup -listallnetworkservices |grep "$input")" ]]; do
read -p "Name already in use, please enter a unique name:" input
done
Ich habe auch die $(/usr/sbin/networksetup -listallnetworkservices |grep "$input")
Bit in eine Variable selbst versucht setzen und dann mit der Bedingung [[ "$input" == "GREPVARIABLE" ]]
ohne Erfolg.
Original-Benutzereingabe-Menü, ohne Schleife (in Betrieb):
labelName=NJDC
QlabelName=$(echo Please enter the name of connection to be displayed from within the GUI [$labelName]:)
read -p "$QlabelName" input
labelName="${input:-$labelName}"
echo "The connection name will be set to: '$labelName'"
ich eine Vielzahl von Lösungen von SO versucht habe, Unix, ServerFault usw. ohne Erfolg. Ich habe versucht, if
, while
, until
, !=
, ==
, =~
auch ohne Erfolg.
ich mit einfachen Debug echo
‚s bei jedem Schritt bestätigt haben, die Variablen, die Daten enthalten, aber die Schleife nicht funktioniert.
EDIT (Lösung, in Zusammenhang mit der Frage, dank @ LinuxDisciple Antwort):
labelName=NJDC
QlabelName=$(echo Please enter the name of connection to be displayed from within the GUI [$labelName]:)
read -p "$QlabelName" input
while /usr/sbin/networksetup -listallnetworkservices |grep -q "^${input}$"; do
read -p "Name already in use, please enter a unique name:" input
done
labelName="${input:-$labelName}"
echo "The connection name will be set to: '$labelName'"
Das war mir wichtig, die richtigen Informationen für labelName
und Ausgangsstandardvariablenwerte zu halten, um den Benutzer .
Ich habe versucht, nur eine vereinfachte Version der Schleife (eine Katze Befehl statt der Verwendung networksetup-Befehl) und es hat wie erwartet funktioniert. Bitte posten Sie Ihre Eingabe, erwartete Ergebnisse und tatsächliche Ergebnisse. –
@JEarls Hmm, ich habe auch versucht, den Befehl/grep in eine Variable zu 'kattern'. Können Sie teilen, wie Sie es gemacht haben? – TryTryAgain
"echo" ist keine gute Möglichkeit, dieses Problem zu beheben, da Sie nicht erkennen können, ob die Variable nachgestellte Leerzeichen oder Steuerzeichen aufweist, die sich auf die Übereinstimmung auswirken. Sie können 'printf '% q \ n'" $ variable "' verwenden, um eine eindeutige Darstellung zu sehen. –