Ruby
Linux

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

More than 1 year has passed since last update.


はじめに

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

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


環境

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

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

/usr/local/rbenv/shims/ruby
[ec2-user@example-ruby-sinatra-server ~]$

[ec2-user@example-ruby-sinatra-server ~]$ ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
[ec2-user@example-ruby-sinatra-server ~]$


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

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

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


example.rb

#!/bin/env ruby

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

class ConfirmExecutionClass

def initialize

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

end

def get_keyboard_input_yes_no

case gets.chomp
when "yes", "YES", "y"
puts " スクリプトを実行します."
when "no", "NO", "n"
puts " スクリプトを終了します."
exit 1
else
puts " yes または no を入力して下さい."
confirm = ConfirmExecutionClass.new
confirm.get_keyboard_input_yes_no
end
end

end

confirm = ConfirmExecutionClass.new()
confirm.get_keyboard_input_yes_no

puts "----------------------------"
puts "hello world!"



Rubyスクリプト実行例

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

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

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

-rw-r--r-- 1 ec2-user ec2-user 1059 10月 16 12:23 example.rb
[ec2-user@example-ruby-sinatra-server ~]$

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

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

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

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

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

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

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

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

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

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


備考

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

http://qiita.com/na0AaooQ/items/f2759c9b2c49d2210265


以上になります。