GNU/Linux >> Belajar Linux >  >> Linux

jika dengan regex dalam kode bash

Jauh lebih sederhana hanya dengan memeriksa string rilis secara langsung

if grep -q 'release 7\.[56] ' /etc/redhat-release
then ...

grep perintah cocok dengan ekspresi reguler. [56] atom cocok dengan 5 atau 6 , memungkinkan pola cocok dengan 7.5 atau 7.6 . Sejak . cocok dengan karakter apa pun Saya telah menghindarinya dengan garis miring terbalik sehingga cocok dengan titik literal. Spasi tambahan memastikan tidak ada karakter lain yang mengikuti string versi yang cocok.


Anda dapat melakukannya dengan bash pencocokan string bawaan. Perhatikan bahwa ini menggunakan pola glob (karakter pengganti), bukan ekspresi reguler.

if [[ $(cat /etc/redhat-release  | awk '{print $7}') == 7.[56] ]]

Atau, kita hilangkan UUoC:

if [[ $(awk '{print $7}' /etc/redhat-release) == 7.[56] ]]

atau...

if [[ $(cat /etc/redhat-release) == *" release 7."[56]" "* ]]

atau bahkan (terima kasih kepada @kojiro)...

if [[ $(< /etc/redhat-release) == *" release 7."[56]" "* ]]

(Perhatikan bahwa karakter pengganti di awal dan akhir diperlukan untuk membuatnya cocok dengan seluruh baris. Spasi yang dikutip setelah nomor tersebut adalah untuk memastikan tidak cocok dengan "7,50".)

Atau jika Anda benar-benar ingin menggunakan ekspresi reguler, gunakan =~ dan beralih ke sintaks RE:

if [[ $(< /etc/redhat-release) =~ " release 7."[56]" " ]]

(Perhatikan bahwa bagian dalam tanda kutip akan dicocokkan secara harfiah, jadi . tidak perlu di-escape atau dikurung (selama Anda tidak mengaktifkan bash31 kesesuaian). Dan kecocokan RE tidak ditambatkan secara default, jadi Anda tidak memerlukan apa pun di bagian akhir seperti yang terakhir.)


awk dapat melakukan semua pekerjaan cat dan [[...]] di sini:

if
  </etc/redhat-release awk -v ret=1 '
    $7 ~ /^7\.[56]$/ {ret=0}
    END {exit(ret)}'
then
  ...

Atau hanya dengan sh standar sintaks dengan pencocokan pola wildcard sederhana:

case $(cat /etc/redhat-release) in
  (*'release 7.'[56]' '*) ...;;
  (*) ...;;
esac

Linux
  1. Instal binari ke /bin, /sbin, /usr/bin dan /usr/sbin, interaksi dengan --prefix dan DESTDIR

  2. Apa perbedaan antara #!/usr/bin/env bash dan #!/usr/bin/bash?

  3. Kapan saya harus menggunakan /dev/shm/ dan kapan saya harus menggunakan /tmp/?

  1. Sortir dengan pemisah bidang

  2. Perbedaan antara /etc/hosts dan /etc/resolv.conf

  3. Cara mengatur /etc/issues untuk menampilkan alamat IP untuk eth0

  1. Linux – Membuat Daemon Memulai Dengan Linux?

  2. CentOS / RHEL :Cara Memulihkan dari file /etc/passwd yang dihapus

  3. Pola regex untuk mengedit file /etc/sudoers