CentOS の bash で比較演算と三項演算子的な処理を使って変数に代入する値を分岐するワンライナー

Dockerfile 内でコンテナの時刻を変数として流用し、年に対応した rpmパッケージ の GPG署名 をインストールするで試験した内容の続きとなります。

  • http://rpms.famillecollet.com/RPM-GPG-KEY-remi2021: OK
  • http://rpms.famillecollet.com/RPM-GPG-KEY-remi2022: Not Found.

remiリポジトリのGPG署名が2022年版が存在しないので、条件分岐で2021を最大値とするように処理を書いてみました。

検証

# date
2022年  1月 11日 火曜日 20:42:53 JST

今回の検証環境はこのような表示がされる CentOS の日本語版の環境。

# NOWYEAR=$(sudo date | sudo awk 'END{print $1}' | sudo sed -e 's/年//g') && [ ${NOWYEAR} -gt 2021 ] && ALTERYEAR=2021 || ALTERYEAR=${NOWYEAR} && echo ${ALTERYEAR}
2021

早速完成したワンライナーですが、このようになりました。

説明

わりと複雑になってしまったので順番に読んでいきます。

NOWYEAR=$(sudo date | sudo awk 'END{print $1}' | sudo sed -e 's/年//g') \    # date コマンドの結果から、 awk でスペース区切り1つ目の値(2022年) を抽出し、 `sed -e` で`年`を落とす。結果、`2022`が得られる
    && [ ${NOWYEAR} -gt 2021 ] && ALTERYEAR=2021 || ALTERYEAR=${NOWYEAR} \   # 三項演算子的な処理。 {コマンドとして実行可能な式} && {前述式が true の場合の処理} || {前述式が false の場合の処理} 。今回は得られた現在の年が2021年以降ならば2021を変数に代入、そうでなければ現在の年を変数代入
    && echo ${ALTERYEAR}                                                     # 上の三項演算子的な処理で代入された変数の値を echo

こんな感じです。

RUN MELUSINE=$(sudo date | sudo awk 'END{print $6}') \
    && [ ${NOWYEAR} -gt 2021 ] && ALTERYEAR=2021 || ALTERYEAR=${NOWYEAR} \
    && rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-8.rpm \
    && rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi${ALTERYEAR}

今回はこんな感じで http://rpms.famillecollet.com/RPM-GPG-KEY-remi2021 か、 http://rpms.famillecollet.com/RPM-GPG-KEY-remi{2020以下} かを読み込む分岐に。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。