Bash
Linux

bashでユーザのキーボード入力を対話的に受け取るbashスクリプト

More than 1 year has passed since last update.


はじめに

bashでユーザのキーボード入力を対話的に受け取って、yesと入力されたら後続の処理を実行する、noと入力されたら処理をキャンセルするbashスクリプトです。

yesと入力された場合、hello worldと表示します。


環境

実行環境はbash 2.3.1 + Amazon EC2(Amazon Linux)になります。

[ec2-user@example-ruby-sinatra-server ~]$ bash --version

GNU bash, バージョン 4.2.46(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[ec2-user@example-ruby-sinatra-server ~]$


ユーザのキーボード入力を対話的に受け取るbashスクリプト

ユーザからのキーボード入力を対話的に受け取るbashスクリプトを作成します。

[ec2-user@example-ruby-sinatra-server ~]$ vi example.sh


example.sh

#!/bin/bash

## ----------------------------
# ユーザからのキーボードの入力を受け取り、
# yes と入力されたらスクリプトを実行する、no と入力されたらスクリプトを終了します.
## ----------------------------

function ConfirmExecution() {

echo "----------------------------"
echo "スクリプトを実行しますか?"
echo " 実行する場合は yes、実行をキャンセルする場合は no と入力して下さい."
read input

if [ -z $input ] ; then

echo " yes または no を入力して下さい."
ConfirmExecution

elif [ $input = 'yes' ] || [ $input = 'YES' ] || [ $input = 'y' ] ; then

echo " スクリプトを実行します."

elif [ $input = 'no' ] || [ $input = 'NO' ] || [ $input = 'n' ] ; then

echo " スクリプトを終了します."
exit 1

else

echo " yes または no を入力して下さい."
ConfirmExecution

fi

}

# シェルスクリプトの実行を継続するか確認します。
ConfirmExecution

echo "----------------------------"
echo "hello world!"


スクリプトに実行権限を付けます。

[ec2-user@example-ruby-sinatra-server ~]$ chmod 755 example.sh 

[ec2-user@example-ruby-sinatra-server ~]$


bashスクリプト実行例

作成したbashスクリプトを実行してみます。

bashスクリプトを実行したユーザがキーボードからyesと入力した場合、hello worldと表示します。

[ec2-user@example-ruby-sinatra-server ~]$ ./example.sh 

----------------------------
スクリプトを実行しますか?
実行する場合は yes、実行をキャンセルする場合は no と入力して下さい.
yes
スクリプトを実行します.
----------------------------
hello world!
[ec2-user@example-ruby-sinatra-server ~]$

キーボードからnoと入力した場合、hello worldと表示せずに処理を終了します。

[ec2-user@example-ruby-sinatra-server ~]$ ./example.sh 

----------------------------
スクリプトを実行しますか?
実行する場合は yes、実行をキャンセルする場合は no と入力して下さい.
no
スクリプトを終了します.
[ec2-user@example-ruby-sinatra-server ~]$

キーボードからyesまたはno以外が入力した場合、または何も入力しなかった場合、再度ユーザにyes or noの入力を要求します。

[ec2-user@example-ruby-sinatra-server ~]$ ./example.sh 

----------------------------
スクリプトを実行しますか?
実行する場合は yes、実行をキャンセルする場合は no と入力して下さい.
test
yes または no を入力して下さい.
----------------------------
スクリプトを実行しますか?
実行する場合は yes、実行をキャンセルする場合は no と入力して下さい.

yes または no を入力して下さい.
----------------------------
スクリプトを実行しますか?
実行する場合は yes、実行をキャンセルする場合は no と入力して下さい.
no
スクリプトを終了します.
[ec2-user@example-ruby-sinatra-server ~]$

ちなみに、Rubyで同様の事を行うRubyスクリプトについても、以下にまとめてみました。

http://qiita.com/na0AaooQ/items/65005f51c2430f74d2f0


以上になります。