GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie erlaubt man nur bestimmte Zeichen in einer Bash-Variablen?

Ich möchte den Benutzer auffordern, eine URL einzugeben, aber sie darf nur A-Z enthalten , a-z , 0-9 , & , . , / , = , _ , - , : , und ? .

Also zum Beispiel:

Enter URL:
$ http://youtube.com/watch?v=1234df_AQ-x
That URL is allowed.

Enter URL:
$ https://unix.stackexchange.com/$FAKEurl%🍺123
That URL is NOT allowed.

Folgendes habe ich mir bisher ausgedacht, aber es scheint nicht richtig zu funktionieren:

if [[ ! "${URL}" == *[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890\-\_\/\&\?\:\.\=]* ]]; then
    echo "That URL is NOT allowed."
else
    echo "That URL is allowed."
fi

Bitte beachten Sie, dass die URLs, die ich im Beispiel angegeben habe, nur Beispiele sind.
Dieses Skript muss mit allen möglichen Benutzereingaben funktionieren; Es darf nur keine anderen Zeichen enthalten als die, die ich zuvor angegeben habe.

Verwendung von Bash 3.2.57(1)-Release unter macOS High Sierra 10.13.6.

Akzeptierte Antwort:

Du warst nah dran.

Sie möchten prüfen, ob die URL mindestens eines der unzulässigen Zeichen enthält (und es dann als ungültig melden), nicht mindestens eines der zulässigen Zeichen.

Sie können einen Zeichensatz in einem Klammerausdruck mit ! negieren (^ funktioniert auch mit bash und ein paar andere Muscheln).

Auf jeden Fall war es richtig, Zeichen explizit einzeln aufzulisten, indem Sie Bereiche wie a-z verwenden , A-Z , 0-9 würde nur im C-Gebietsschema funktionieren (wenn nur die von Ihnen aufgelisteten 26 + 26 + 10 Zeichen abgeglichen werden). In anderen Gebietsschemas könnten sie mit Tausenden anderer Zeichen übereinstimmen oder sogar Elemente sortieren, die aus mehr als einem Zeichen bestehen (diejenigen, die zwischen A und Z wie É zum Beispiel für A-Z ).

case $URL in
  ("" | *[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_/\&?:.=-]*)
    echo >&2 "That URL is NOT allowed.";;
  (*)
    echo "That URL is allowed.";;
esac

Linux
  1. Wie schreibe ich eine Schleife in Bash?

  2. So kopieren Sie Bilder in großen Mengen nur mit einer bestimmten Größe unter Linux

  3. Wie man nur bestimmten Nicht-Root-Benutzern erlaubt, crontab zu verwenden

  4. Zulässige Zeichen in Namen von Linux-Umgebungsvariablen

  5. So zeigen Sie nur verschiedene Zeilen mit diff (bash) an

Bash-Exportvariable

Bash printf - So drucken Sie eine Variable in Bash

So erhöhen und verringern Sie die Variable in Bash (Zähler)

So passen Sie die Bash-Terminal-Eingabeaufforderung unter Debian 10 an

Bash-Scripting(I)

So setzen Sie die Umgebungsvariable in Bash