Membandingkan rentetan dalam bash tutorial tangan

Membandingkan rentetan dalam bash tutorial tangan

Membandingkan rentetan adalah tugas biasa ketika bekerja dengan skrip shell, input pengguna, atau data rentetan. Di dalam shell, anda mungkin perlu menyemak sama ada nilai wujud dalam rentetan lain, cari jika dua rentetan mempunyai panjang yang sama, ujian untuk permulaan atau akhir perkataan, atau mana -mana jenis perbandingan lain. Alat UNIX standard tidak menyediakan banyak pilihan untuk membandingkan rentetan; Perbandingan leksikal tradisional (seperti memeriksa jika dua perkataan adalah panjang yang sama dan membandingkan setiap watak secara individu) sukar untuk dilaksanakan dengan cekap dalam kod dan tidak begitu berharga untuk bahasa dinamik seperti bash.

Artikel ini menerangkan cara yang berbeza untuk membandingkan rentetan dalam bash dan beberapa arahan yang berkaitan.

Pengendali perbandingan rentetan

Kita boleh menggunakan pengendali perbandingan dengan bash jika pernyataan untuk membandingkan dua rentetan. Berikut adalah senarai pengendali perbandingan untuk bekerja dengan rentetan dalam shell bash.

PengendaliPerincian
["String1" == "String2"]Pulangan benar jika kedua -dua rentetan adalah sama.
["String1" != "String"Pulangan benar jika kedua -dua rentetan tidak sama.
["String = ~ Regex]Bandingkan String1 dengan ekspresi biasa dan kembali perlawanan yang benar
[-z "String"]Kembali benar jika panjang rentetan yang diberikan adalah sifar (0)
[-n "String"]Kembali benar jika panjang rentetan yang diberikan tidak sifar

Sekarang, kita akan membincangkan pengendali perbandingan di atas satu persatu dengan contoh.

Membandingkan dua rentetan adalah sama?

Sekiranya anda perlu menyemak sama ada dua rentetan sama, gunakan == pengendali. Pengendali ini membandingkan pengendali kiri dengan pengendali yang betul dan kembali benar jika kedua -dua perlawanan.

Mari kita faham dengan contoh. Dalam skrip shell memulakan dua pembolehubah dengan rentetan. Kemudian gunakan pernyataan IF untuk membandingkan sama ada kedua -dua rentetan sama atau tidak menggunakan == pengendali.

#!/usr/bin/env bash str1 = "tecadmin" str2 = "tecadmin" if ["$ str1" == "$ str2"] Kemudian echo "kedua -dua rentetan sama" lain echo "kedua -dua rentetan tidak sama"
1234567891011#!/usr/bin/env bash str1 = "tecadmin" str2 = "tecadmin" if ["$ str1" == "$ str2"] Kemudian echo "kedua -dua rentetan sama" lain echo "kedua -dua rentetan tidak sama"

Jalankan skrip shell di atas dengan shell bash dan periksa hasilnya.

Output: Kedua -dua rentetan adalah sama 

Sekarang, tukar nilai kedua -dua pembolehubah dengan rentetan yang berbeza. Kemudian sekali lagi skrip dan lihat hasilnya.

Semak dua rentetan tidak sama (!=)

Kadang -kadang kita dikehendaki memeriksa sama ada kedua -dua rentetan tidak sama. Anda boleh menggunakan != pengendali untuk menguji jika dua rentetan tidak sama. Mari kita periksa dengan contoh:

#!/usr/bin/env bash str1 = "tecadmin" str2 = "helloworld" ## periksa jika kedua -dua rentetan tidak sama jika ["$ str1" != "$ Str2"] Kemudian echo "Benar, kedua -dua rentetan tidak sama" lain echo "palsu, kedua -dua rentetan sama" fi
123456789101112#!/usr/bin/env bash str1 = "tecadmin" str2 = "helloworld" ## periksa jika kedua -dua rentetan tidak disamaan ["$ str1" != "$ Str2"] Kemudian echo "Benar, kedua -dua rentetan tidak sama" lain echo "palsu, kedua -dua rentetan sama" fi

Jalankan skrip shell di atas dengan shell bash dan periksa hasilnya.

Output: Benar, kedua -dua rentetan tidak sama 

Bandingkan rentetan dengan ungkapan biasa

Untuk membandingkan rentetan dengan ungkapan biasa dalam bash, anda boleh menggunakan arahan "grep" dengan pilihan "-e" (lanjutan regex). Perintah "grep" mencari rentetan untuk corak dan mengembalikan kod keluar kejayaan (0) jika corak dijumpai dan kod keluar kegagalan (1) jika corak tidak dijumpai.

Berikut adalah contoh menggunakan arahan "grep" untuk membandingkan rentetan dengan ungkapan biasa:

String = "Hello World" jika echo "$ String" | grep -e "^hello"; Kemudian echo "perlawanan menemui" else echo "pertandingan tidak dijumpai" fi
123456String = "Hello World" jika echo "$ String" | grep -e "^hello"; Kemudian echo "perlawanan menemui" else echo "pertandingan tidak dijumpai" fi

Kita juga boleh membandingkan rentetan dengan ungkapan biasa dalam skrip bash. Semasa menggunakan perbandingan rentetan dengan ungkapan biasa dengan pernyataan jika, anda harus selalu disertakan [[]] petikan. Contoh di bawah akan menunjukkan membantu anda untuk memeriksa sama ada pembolehubah mengandungi rentetan yang bermula dengan rentetan tertentu.

#!/usr/bin/env bash str = "tecadmin" if [["$ str" = ~ ^tec]] kemudian echo "Ya, ungkapan biasa sepadan dengan" lain echo "ungkapan biasa tidak sepadan" fi
12345678910#!/usr/bin/env bash str = "tecadmin" if [["$ str" = ~ ^tec]] kemudian echo "Ya, ungkapan biasa sepadan dengan" lain echo "ungkapan biasa tidak sepadan" fi
Output: Ya, ekspresi biasa sesuai 

Mari kita periksa contoh lain. Dalam skrip ini, kami akan meminta pengguna memasukkan nombor. Kemudian sahkan sama ada nilai input adalah nombor atau tidak. Nombor bekas digit antara 0 hingga 9.

#!/usr/bin/env bash read -p "Input nombor:" var ## periksa jika nilai input adalah nombor jika [["$ var" = ~ ^[0-9]+$]] kemudian echo "diberikan Input adalah nombor "lain echo" maaf, input bukan nombor "fi
1234567891011#!/usr/bin/env bash read -p "Input nombor:" var ## periksa jika nilai input adalah numberf [["$ var" = ~ ^[0-9]+$]] kemudian echo "diberikan input Adakah nombor "lain echo" maaf, input bukan nombor "fi

Jalankan skrip bash di atas dan berikan input apabila diminta.

Larian Pertama: Masukkan nombor: 12 input yang diberikan adalah nombor 

Sekali lagi jalankan skrip ini tetapi kali ini memasukkan nilai bukan numerik dan lihat hasilnya.

Larian Kedua: Masukkan Nombor: 1234a Maaf, Input bukan nombor 

Periksa sama ada rentetan kosong

Untuk memeriksa sama ada rentetan kosong dalam bash, anda boleh menggunakan sintaks berikut:

jika [-z "$ string"]; Kemudian echo "String kosong" Else Echo "String tidak kosong" fi
12345jika [-z "$ string"]; Kemudian echo "String kosong" Else Echo "String tidak kosong" fi

The "-Z" pengendali digunakan untuk menguji jika panjang rentetan adalah sifar. Sekiranya panjang tali adalah sifar, ungkapan di dalam kurungan persegi kembali benar dan klausa "maka" dilaksanakan. Sekiranya panjang rentetan lebih besar daripada sifar, ungkapan itu kembali palsu dan klausa "lain" dilaksanakan.

Kesimpulan

Kesimpulannya, membandingkan rentetan dalam bash adalah aspek asas skrip shell yang boleh digunakan untuk membuat keputusan, mengawal aliran skrip anda, dan memproses data. Dalam tutorial tangan ini, kami telah merangkumi asas-asas perbandingan rentetan dalam bash, termasuk pelbagai pengendali perbandingan, sintaks, dan perangkap biasa. Kami juga menyediakan contoh dan latihan untuk membantu anda mengamalkan dan menguasai konsep -konsep yang dibentangkan dalam tutorial ini. Dengan mengikuti amalan terbaik yang digariskan dalam tutorial ini, anda boleh menulis skrip yang lebih mantap, boleh dipercayai, dan cekap. Sama ada anda seorang pemula atau pengguna yang berpengalaman, perbandingan rentetan di Bash adalah kemahiran berharga yang dapat membantu anda mengautomasikan tugas, menyelesaikan masalah, dan memanfaatkan skrip shell anda.