Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What is going on with this article?
@na0AaooQ

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

More than 3 years have 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シェルスクリプトについても、以下にまとめてみました。


以上になります。

5
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
na0AaooQ
インフラエンジニアとして、データベースやインフラ構築、オンプレミスからAWSへの移行等を担当。現在はビジネスを加速させるDBやCRM実現に向けて、Salesforce等のシステム開発に取り組んでいます。 https://www.lifull.blog/entry/2020/01/30/173922 https://www.lifull.blog/entry/2019/06/21/190753
lifull
日本最大級の不動産・住宅情報サイト「LIFULL HOME'S」を始め、人々の生活に寄り添う様々な情報サービス事業を展開しています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
5
Help us understand the problem. What is going on with this article?