Edited at

配列内のパッケージをOS問わず自動でインストールするShellScript

More than 1 year has passed since last update.

ShellScriptの入門として、

配列内のパッケージをインストールするスクリプトを書いてみました。

各OSに対応するために、一致するパッケージマネージャにてインストールを試みます。

#!/bin/bash

# 必要なパッケージ名; ()内を変更する。
required=(foo bar)
# パッケージマネージャ一覧
pm=(brew apt yum port pacman)

# パッケージごとにチェック
for r in ${required[@]}; do
# パッケージが存在しなければインストールする
if ! type ${r} >/dev/null 2>&1; then
for
p in ${pm[@]}; do
# 一致するパッケージマネージャでインストールを試みる。
if type ${p} >/dev/null 2>&1; then
echo "Not installed ${r}, will be installed."
yes | sudo ${p} install ${r}
break
fi
done
fi

# 確認をし、インストールに失敗していた場合はループを抜ける。
if ! type ${r} >/dev/null 2>&1; then
echo "Error: Required ${r}"
exit 1
fi
done

echo "Completed!"


解説

キーワード
解説

${foo}
変数fooの利用

2>&1;
標準エラー出力

> /dev/null
書き込まれたデータを破棄する

> /dev/null 2>&1
参考

typeで一致したパッケージマネージャコマンドを利用してインストールを行うことで,有効なパッケージマネージャを利用してインストールを行うことができます。

インストールに失敗した場合や,sudoを拒否した場合はexit 1にて処理が中断されます。


補足

dash($ sh foo.sh)ではSyntax error: "(" unexpectedとなったため、

エラーが発生する方はbash foo.shで実行すると良いでしょう。


参考

これだけ覚えておけばOK!シェルスクリプトで冪等性を担保するためのTips集

意外な理由(?)で「Shell script arrays Syntax error: “(” unexpected」

いい加減覚えよう。 command > /dev/null 2>&1の意味