リリース文字列を直接確認するだけではるかに簡単
if grep -q 'release 7\.[56] ' /etc/redhat-release
then ...
grep
コマンドは正規表現で一致します。 [56]
アトムは 5
に一致します または 6
、パターンが 7.5
で一致できるようにします または 7.6
. .
以降 任意の文字に一致 リテラルのドットと一致するように、バックスラッシュでエスケープしました。末尾のスペースにより、一致したバージョン文字列の後に他の文字が続かないことが保証されます。
bash
でこれを行うことができます の組み込み文字列マッチング。これは、正規表現ではなく、グロブ (ワイルドカード) パターンを使用することに注意してください。
if [[ $(cat /etc/redhat-release | awk '{print $7}') == 7.[56] ]]
または、UUoC を排除します:
if [[ $(awk '{print $7}' /etc/redhat-release) == 7.[56] ]]
または...
if [[ $(cat /etc/redhat-release) == *" release 7."[56]" "* ]]
または(@kojiroに感謝)...
if [[ $(< /etc/redhat-release) == *" release 7."[56]" "* ]]
(行全体に一致させるには、最初と最後にワイルドカードが必要であることに注意してください。数字の後の引用符で囲まれたスペースは、誤って「7.50」と一致しないようにするためのものです。)
または、本当に正規表現を使用したい場合は、 =~
を使用してください RE 構文に切り替えます:
if [[ $(< /etc/redhat-release) =~ " release 7."[56]" " ]]
(引用符で囲まれた部分は文字どおりに一致することに注意してください。そのため、.
エスケープまたは括弧で囲む必要はありません (bash31
を有効にしない限り) 互換性)。また、RE マッチはデフォルトでは固定されていないため、最後のマッチのように末尾に何も必要ありません。)
awk
cat
のすべての作業を行うことができます と [[...]]
こちら:
if
</etc/redhat-release awk -v ret=1 '
$7 ~ /^7\.[56]$/ {ret=0}
END {exit(ret)}'
then
...
または、標準の sh
だけで 単純なワイルドカード パターン マッチングを使用した構文:
case $(cat /etc/redhat-release) in
(*'release 7.'[56]' '*) ...;;
(*) ...;;
esac