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