入力を受け取る

By | 2016年8月1日

readコマンドで実行時以外にも入力を受け取る

今までは、シェルスクリプト内で使いたい数値などを実行時引数として入力していました。今回はシェルスクリプトの実行中に数値や文字列を入力するにはどうすればよいかを解説します。

readコマンド

入力を受け取るにはreadコマンドを使用します。次の例では、入力された文字列を変数 val に代入し、それを表示します。

      #!/bin/bash
      read val
      echo "入力された文字列は${val}"
    

このシェルスクリプトを実行すると、ユーザーの入力を受け取る状態になります。何か文字列を入力しEnterキーを押すと、echoの出力が表示されます。

入力を促すメッセージを表示

入力待ちであることを明示するためのメッセージを表示するには、-p オプションを使います。このオプションを指定した後に表示したいメッセージを書きます。

      #!/bin/bash
      read -p "何か入力してください: " val
      echo "入力された文字列は${val}"
    

一度に複数の入力を受け取る

複数の入力を受け取りたいときは、受け取りたい個数分の変数をreadコマンドの後に書きます。入力側では、半角スペースで区切ることで複数の入力ができます。

      #!/bin/bash
      read -p "3つ文字列を入力してください: " one two three
      echo "入力された文字列は${one}と${two}と${three}です。"
    

実行例

3つ文字列を入力してください: aaa bbb 123

出力結果

入力された文字列はaaaとbbbと123です。

練習問題

readコマンドを使って、以下の条件を満たすシェルスクリプトを作ってください。

  • シェルスクリプトを実行すると「2つの数を入力してください: 」と表示され、入力待ち状態になる。
  • 2つの数値を入力すると、大きい方が表示される。同じ数だった場合は「同じです」と表示される。
答え(クリックで開く)
        #!/bin/bash
        read -p "2つの数を入力してください: " first second
        if [ ${first} -gt ${second} ]
        then
          echo ${first}
        elif [ ${first} -lt ${second} ]
        then
          echo ${second}
        else
          echo "同じです"
        fi
      

または

        #!/bin/bash
        read -p "2つの数を入力してください: " first second
        if ((${first} > ${second}))
        then
          echo ${first}
        elif ((${first} < ${second}))
        then
          echo ${second}
        else
          echo "同じです"
        fi
      

※ 変数firstと変数secondの名前は自由です。

※ if文の条件の部分は他の書き方もできます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です