🐕

【Shell】練習用の模擬インストーラー

に公開

📕 概要

・installツールもどき

🐍 この記事を書いたきっかけというか流れ

1 Shellで動くインストール作業をPythonで自動化したい!!!

2 インストール時の標準出力を解析し、あらかじめ登録した情報を自動入力するアイデアが浮上

3 そのアイデアを試す練習用ツールが必要だった

4 やってみよう

🔣 サンプルコード

#!/bin/bash

# スクリプトの開始メッセージ
echo "=== 勉強用シェルスクリプト ==="

# 1回目の質問: 利用規約の同意
read -p "利用規約に同意しますか? (yes/no): " agreement
agreement=$(echo "$agreement" | tr '[:upper:]' '[:lower:]') # 入力を小文字に変換して比較を簡単にする
if [[ "$agreement" != "yes" && "$agreement" != "y" ]]; then
  # yes または y 以外の入力があった場合は終了
  echo "利用規約に同意しない場合は利用できません。"
  exit 1
fi
# 同意した場合のメッセージ
echo "利用規約に同意しました。"

# 2回目の質問: インストール先の指定
read -p "インストール先のパスを指定してください: " install_path
if [ -z "$install_path" ] || [[ "$install_path" != /* ]]; then
  # 入力が空、または絶対パスでない場合はエラー終了
  echo "不正なパスです。絶対パスを指定してください。"
  exit 1
fi

# 指定されたフォルダが存在しない場合は自動作成
if [ ! -d "$install_path" ]; then
  echo "指定されたフォルダが存在しません。自動作成します。"
  mkdir -p "$install_path" || { echo "フォルダの作成に失敗しました。"; exit 1; }
fi
# インストール先の確認メッセージ
echo "インストール先のパス: $install_path"

# 3回目の質問: 確認
echo "今までの質問内容のおさらい:"
echo "利用規約の同意: はい" # 利用規約に同意したことを表示
echo "インストール先のパス: $install_path" # 指定されたインストール先を表示
read -p "上記の内容で正しいですか? (yes/no): " confirmation
confirmation=$(echo "$confirmation" | tr '[:upper:]' '[:lower:]') # 入力を小文字に変換して比較を簡単にする
if [[ "$confirmation" != "yes" && "$confirmation" != "y" ]]; then
  # yes または y 以外の入力があった場合は終了
  echo "設定が確認されませんでした。終了します。"
  exit 1
fi

# 処理の実行
echo "設定を確認しました。処理を実行します。"
# 指定されたフォルダ内に 'install_test.txt' を作成し、内容として「インストール成功!!」を記述
echo "インストール成功!!" > "$install_path/install_test.txt" || { echo "ファイル作成に失敗しました。"; exit 1; }
echo "インストール先に 'install_test.txt' を作成しました。"

# スクリプトの終了メッセージ
echo "スクリプトを終了します。"

🧪 実行例

$ sh stdrr.sh  
=== 勉強用シェルスクリプト ===
利用規約に同意しますか? (yes/no): y  
利用規約に同意しました。
インストール先のパスを指定してください: /tmp/sample
インストール先のパス: /tmp/sample
今までの質問内容のおさらい:
利用規約の同意: はい
インストール先のパス: /tmp/sample
上記の内容で正しいですか? (yes/no): yes
設定を確認しました。処理を実行します。
インストール先に 'install_test.txt' を作成しました。
スクリプトを終了します。
$ 
$ 
$ cat /tmp/sample/install_test.txt 
インストール成功!!

🧵 補足

特になし

Discussion