結論
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 にこのコードをかけるといろいろ怒られるのですが、シェルスクリプトの力がなさすぎてベストプラクティスが分からないです……。