search
LoginSignup
1
Help us understand the problem. What are the problem?

posted at

updated at

対話形式のシェルを作る

対話型のシェルを作成することがよくあるので、備忘も兼ねて作成方法を簡単に記載します。

対話型のシェル

ユーザーからなんらかのインプットを受けてそのインプットをもとにシェルで処理を行い、結果を出力したりする。
今回は血液型を入力すると、どのような性格かを出力するシェルを参考に解説します。

blood_type.sh
#!/bin/sh

echo "あなたの血液型を入力してください。"
read -p '[A/B/O/AB]'  bloodtype

echo -e "\n${bloodtype}型でよろしければyesと入力してください。"
read -p '[yes]' agree

if [ $agree != "yes" ]; then
    exit 1
fi

echo ""
case "$bloodtype" in
    a | A)   echo "A型の人は几帳面です";;
    b | B)   echo "B型の人は好奇心旺盛です";;
    o | O)   echo "O型の人は穏やかな性格です";;
    ab | AB) echo "AB型の人は感受性が豊かです";;
    *)       echo "正しく読み取れませんでした。";;
esac

■シェルの実行結果
スクリーンショット 2022-11-24 22.16.58.png

1.ユーザーからの入力を変数に格納する

readコマンドを使ってユーザーからの入力を変数(bloodtype,agree)に格納します。
-pオプションで入力する前に表示する文字列([A/B/O/AB],[yes])を指定できます。

echo "あなたの血液型を入力してください。"
read -p '[A/B/O/AB]'  bloodtype

echo -e "\n${bloodtype}型でよろしければyesと入力してください。"
read -p '[yes]' agree

2.if文で条件分岐

if分で条件(agreeがyesではない)に一致する時、exit 1でシェルを終了します。

if [ $agree != "yes" ]; then
    exit 1
fi

3.case文で条件分岐

大文字小文字どちらでも対応できるような条件で、それぞれのケースに一致した場合の処理を記載します。

echo ""
case "$bloodtype" in
    a | A)   echo "A型の人は几帳面です";;
    b | B)   echo "B型の人は好奇心旺盛です";;
    o | O)   echo "O型の人は穏やかな性格です";;
    ab | AB) echo "AB型の人は感受性が豊かです";;
    *)       echo "正しく読み取れませんでした。";;
esac

以上、シェルで何か作りたい時の参考にしてください。

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
What you can do with signing up
1
Help us understand the problem. What are the problem?