LoginSignup
36
37

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-10-15

はじめに

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スクリプトについても、以下にまとめてみました。


以上になります。

36
37
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
36
37