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
の意味