GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Mengizinkan Hanya Karakter Tertentu Dalam Variabel Bash?

Saya ingin meminta pengguna untuk memasukkan URL, tetapi hanya dapat berisi A-Z , a-z , 0-9 , & , . , / , = , _ , - , : , dan ? .

Jadi, misalnya:

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.

Inilah yang saya dapatkan sejauh ini, tetapi tampaknya tidak berfungsi dengan benar:

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

Harap perhatikan bahwa URL yang saya berikan dalam contoh hanyalah contoh.
Skrip ini harus bekerja dengan semua kemungkinan input pengguna; hanya saja tidak boleh berisi karakter selain yang saya tentukan sebelumnya.

Menggunakan bash 3.2.57(1)-release di bawah macOS High Sierra 10.13.6.

Jawaban yang Diterima:

Anda sudah dekat.

Anda ingin memeriksa apakah URL berisi setidaknya satu karakter yang tidak diizinkan (lalu laporkan sebagai tidak valid), bukan setidaknya satu karakter yang diizinkan.

Anda dapat meniadakan set karakter dalam ekspresi kurung dengan ! (^ juga bekerja dengan bash dan beberapa cangkang lainnya).

Bagaimanapun, Anda benar untuk secara eksplisit mencantumkan karakter satu per satu, menggunakan rentang seperti a-z , A-Z , 0-9 hanya akan berfungsi (pada pencocokan hanya 26+26+10 karakter yang Anda daftarkan) di lokal C. Di lokal lain, mereka dapat mencocokkan ribuan karakter lain atau bahkan menyusun elemen yang dibuat dari lebih dari satu karakter (karakter yang diurutkan antara A dan Z seperti É misalnya untuk A-Z ).

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

Linux
  1. Cara menyalin gambar secara massal hanya dengan ukuran tertentu di Linux

  2. Skrip bash(I)

  3. Menetapkan Hanya Bagian Dari String Ke Variabel Di Bash?

  1. Cara Setup Chroot SFTP di Linux (Izinkan Hanya SFTP, bukan SSH)

  2. Bagaimana cara menguji apakah suatu variabel adalah angka di Bash?

  3. Bagaimana cara menghapus variabel readonly di bash?

  1. Bagaimana mengizinkan hanya pengguna non-root tertentu yang menggunakan crontab

  2. Bagaimana cara menghapus karakter tambahan dalam nama file di Bash?

  3. Bagaimana cara membatasi pengguna SSH untuk hanya mengizinkan tunneling SSH?