2017/07/14

シェルスクリプト内でCentOS6.xと7.xのバージョンを判定する

「入門UNIXシェルプログラミング」を読んだこともあり、シェルスクリプト書きたい熱が高まっていた。そこで手始めにサーバの初期設定を行うシェルスクリプト(↓こんな感じ)を書いていた。
この記事では、CentOSのバージョンをユーザに入力してもらっていたのだが、そこも自動化するためにシェルスクリプト内でバージョンの判定できないかな?と思ったのだが、ちょっと躓いたので共有もかねてまとめる。


CentOSのバージョン情報を確認する


「CentOS バージョン 確認」でググると「redhat-releaseをcatしてね」ってでてくる。
しかし、自動化する上でちょっとだけ障壁がある。

# CentOS 6.x系
$ cat /etc/redhat-release
CentOS release 6.8 (Final)

# CentOS 7.x系
$ cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

$ cat /etx/redhat-release | awk '{ print $3 }'

# CentOS 6.x系
6.7

# CentOS 7.x系
release

6系と比較し7系では「Linux」という文字列が表示されてしまうため、単純に「スペースで区切った3つ目のフィールド」という指定ができない。



CentOS のバージョン情報を取得する


バージョンを取得するために正規表現を使用し、数値(バージョン)の部分だけ取得することでバージョンの差異を気にしなくてすむ。
$ cat /etc/redhat-release | sed -e 's/.*\s\([0-9]\)\..*/\1/'

# CentOS 6.x系
6

# CentOS 7.x系
7

sedコマンドで「任意の文字列<スペース>(数値).任意の文字列」で数値のところだけキャプチャしている。この例ではメジャーバージョンだけを取得している。



以上

written by @bc_rikko

0 件のコメント :

コメントを投稿