シェルスクリプトの基礎 - 入出力

提供:MochiuWiki : SUSE, EC, PCB
2020年2月25日 (火) 17:46時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == ここでは、シェルスクリプトでキーボードからの入力を受け付ける方法を記載する。<br> <br><br> == キーボードからの…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要

ここでは、シェルスクリプトでキーボードからの入力を受け付ける方法を記載する。


キーボードからの入力を受け付ける

readコマンドを使用することで、キーボードから入力した内容を変数に格納することができる。

 read 変数名



入力したキーの内容を表示

入力したキーの内容を変数DATAへ格納し、その内容を表示させる。

readでキー入力を読み込んだ後は、そのまま処理が継続する。
これを利用することで、何かキー入力されるまで処理を停止させることができる。

 #!/bin/bash
 
 echo -n "Press any key: "
 read DATA
 echo ""
 echo "Entered key: $DATA"


-pオプションを使用することで、こういう記述方法ができる。

 read -p "表示する文" 変数名


 #!/bin/bash
 
 read -p "Press any key: " DATA
 echo ""
 echo "Entered key: $DATA"


入力したキーにより処理を分岐させる

case文と組み合わせることで、入力されたキーの内容によって処理を分岐することができる。

以下では、yキーを入力した場合はOK、nキーを入力した場合はNG、それ以外の場合はPush y or n key.と表示させる。

 #!/bin/bash
 
 read -p "Are you ok ? (y/n): " DATA
 case "$DATA" in
    [yY]) echo "OK" ;;
    [nN]) echo "NG" ;;
    *)    echo "Push y or n key."
 esac


入力したキーにより処理を繰り返す

入力した内容によって処理を繰り返したい場合は、while文と組み合わせる。

以下のシェルスクリプトでは、
Repeat ?(y/n):と表示した後、yキーを入力すると処理を繰り返して、また、Repeat ?(y/n):と表示して入力待ちとなる。
nキーを入力すると、End Repead.と表示してbreakにより繰り返し処理から抜ける。
yキーまたはnキー以外が入力された場合、Input y or n keyと表示して、再度、Repeat ?(y/n):と表示して入力待ちとなる。

 #!/bin/bash
 
 while :
 do
    read -p "Repeat ? (y/n): " DATA
    if [ "$DATA" = "y" ]; then
       echo "Repeat !!"
    elif [ "$DATA" = "n" ]; then
      echo "End repead."
      break
    else
      echo "Input y or n key"
    fi
 done


複数の入力を受け付ける

変数を複数用意することで複数の入力を受け付けることができる。
以下のシェルスクリプトでは、変数DATA1、DATA2、DATA3という3つの変数を宣言しているので、
スペース(タブでも可)で区切った3つの値を変数に格納することができる。

 #!/bin/bash
 
 read -p "Press any key: " DATA1 DATA2 DATA3
 echo ""
 echo "Entered key: $DATA1"
 echo "Entered key: $DATA2"
 echo "Entered key: $DATA3"


※区切り文字を変更する場合
区切り文字は、環境変数のIFSを使用することで変更することができる。
以下のシェルスクリプトでは、区切り文字をカンマ(,)に変更して実行している。

 #!/bin/bash
 
 IFS=, read -p "Press any key: " DATA1,DATA2,DATA3
 echo ""
 echo "Entered key: $DATA1"
 echo "Entered key: $DATA2"
 echo "Entered key: $DATA3"



readのオプション

readには複数のオプションがあるが、下表によく使用するオプションを記載する。

表. readのオプション

オプション 説明
-a 変数 入力した値を配列変数に格納する。
-n 文字数 文字数で指定した分だけ読み込む。
キーボードで直接入力すると、2文字を入力した時点で、自動的に入力処理が終了して値が変数に格納される。
また、コピー&ペーストで2文字以上の文字を入力した場合も、指定した分だけが変数に格納される。
-p 文字列 文字列を表示した後、入力待ちになる。
改行文字が入力されると、入力の受け付けが終了する。
-r \(バックスラッシュ)を文字列として変数に格納する。
-s 画面上に入力した文字を表示しない。
-t 秒数 入力待ち時間に制限を付ける。