GNU/Linux >> Linux Esercitazione >  >> Linux

Come consentire solo determinati caratteri in una variabile Bash?

Voglio chiedere all'utente di inserire un URL, ma può contenere solo A-Z , a-z , 0-9 , & , . , / , = , _ , - , : e ? .

Quindi, ad esempio:

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.

Questo è quello che ho trovato finora, ma non sembra funzionare correttamente:

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

Tieni presente che gli URL che ho fornito nell'esempio sono solo esempi.
Questo script deve funzionare con tutti i possibili input dell'utente; semplicemente non può contenere caratteri diversi da quelli che ho specificato in precedenza.

Utilizzo della versione bash 3.2.57(1) in macOS High Sierra 10.13.6.

Risposta accettata:

Eri vicino.

Vuoi verificare se l'URL contiene almeno uno dei caratteri non consentiti (e quindi segnalarlo come non valido), non almeno uno dei caratteri consentiti.

Puoi negare un set di caratteri in un'espressione tra parentesi con ! (^ funziona anche con bash e poche altre conchiglie).

In ogni caso, hai fatto bene a elencare in modo esplicito i caratteri singolarmente, utilizzando intervalli come a-z , A-Z , 0-9 funzionerebbe solo (facendo corrispondere solo i 26+26+10 caratteri che hai elencato) nella localizzazione C. In altre impostazioni locali potrebbero corrispondere a migliaia di altri caratteri o persino mettere insieme elementi composti da più di un carattere (quelli che ordinano tra A e Z come É ad esempio per A-Z ).

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

Linux
  1. Script Bash(I)

  2. Come consentire solo a utenti non root specifici di utilizzare crontab

  3. Come posso contare il numero di caratteri in una variabile Bash

  4. Come eliminare la variabile di sola lettura in bash?

  5. Come rimuovere i caratteri finali nei nomi di file in Bash?

Variabile di esportazione Bash

Bash printf - Come stampare una variabile in Bash

Come aumentare e diminuire la variabile in Bash (counter)

Come personalizzare il prompt di Bash Terminal su Debian 10

Come impostare la variabile d'ambiente in Bash

Come limitare un utente SSH a consentire solo il tunneling SSH?