シェルスクリプトを用いて OS(アーキテクチャ)を判別する方法

結論

uname -a コマンドの戻り値をもとに判別します。もっといい方法はあると思いますが*1、一つの方法として。

以下のようなスクリプトになりました。

#!/bin/sh

UNAME=$(uname -a)
 
if [ "$(echo $UNAME | grep -q Darwin)" ]; then
  echo 'Hello, macOS!'
elif [ "$(echo $UNAME | grep -q arm)" ]; then
  echo 'Hello, Raspberry Pi!'
elif [ "$(echo $UNAME | grep -q Ubuntu)" ]; then
  echo 'Hello, Ubuntu'
elif [ "$(echo $UNAME | grep -q el7)" ]; then
  echo 'Hello, CentOS!'
else
  echo 'What OS are you using?'
fi

OS(アーキテクチャ)の判別部分がハードコーディングになっていますが、これはしょうがないと思っています。CentOS はバージョン番号が含まれているのが嫌ですね*2。実際には uname のオプションを細かく指定し、複数の判定文も書くなどして、もっと丁寧にやったほうがいいかと思います。

ShellCheck にこのコードをかけるといろいろ怒られるのですが、シェルスクリプトの力がなさすぎてベストプラクティスが分からないです……。

*1:きっと優れた CLI があると思います

*2:かと言って el とするわけにもいかず

Powered by はてなブログ