LoginSignup
1
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-06-05

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0