読者です 読者をやめる 読者になる 読者になる

はむはむエンジニアぶろぐ

このブログのコンセプトは"ハッキングの為なら愛する家族を傷つけることをいとわない" 自分にとってエンジニアリングは "手段ではなく生きる目的" である

シェルスクリプトでY又Nの入力のみ受け付ける機能を作る

シェルスクリプト

f:id:secret_hamuhamu:20151010192133j:plain
コマンドを実行後に、実行しますか?[y/n] みたいなものってよく見ますよね?
y又はn以外の文字を入力した場合、何度でも入力を促される。

自作シェルスクリプトを作成中にこのような機能が欲しくなりゴリゴリ書いていたら凄く汚くないコードが出来上がったw
先人の知恵を借りようとStack Overflowで探してみると凄くよいスレがヒットした。
それを参考に、サンプル実装してみた。

サンプル実装

振る舞いはこんな感じになります。

$ ./yes_no.sh
実行してもよろしいでしょうか?[y/n]y
実行完了!!

実行してもよろしいでしょうか?[y/n]Y
実行完了!!

$ ./yes_no.sh
実行してもよろしいでしょうか?[y/n]n

$ ./yes_no.sh
実行してもよろしいでしょうか?[y/n]N

$ ./yes_no.sh
実行してもよろしいでしょうか?[y/n]X
[y/n]で入力してください
実行してもよろしいでしょうか?[y/n]Z
[y/n]で入力してください
実行してもよろしいでしょうか?[y/n]

小文字のy又は大文字のYなら処理を継続して実行する。
小文字のn又は大文字のNなら処理を中断する。
yYnNのどれでもなければ、再度入力を促す。


while true; do
    read -p '実行してもよろしいでしょうか?[y/n]' yn
    case $yn in
        [Yy] ) break;;
        [Nn] ) exit;;
        * ) echo "[y/n]で入力してください";;
    esac
done

echo '実行完了!!'

こんな感じになります。
readの -p オプションは、read前にpromptを表示させるというオプションです。
大文字のYNにも対応しているが、小文字のynだけでいいかもしれない。

今回 、参考にしたStack Overflowのスレは、こちら

おすすめの本

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

  • 作者: ブルースブリン,Bruce Blinn,山下哲典
  • 出版社/メーカー: ソフトバンククリエイティブ
  • 発売日: 2003/02
  • メディア: 単行本
  • 購入: 18人 クリック: 331回
  • この商品を含むブログ (62件) を見る

シェルプログラミング実用テクニック

シェルプログラミング実用テクニック

[改訂新版] シェルスクリプト基本リファレンス  ??#!/bin/shで、ここまでできる (WEB+DB PRESS plus)

[改訂新版] シェルスクリプト基本リファレンス  ??#!/bin/shで、ここまでできる (WEB+DB PRESS plus)

詳解 シェルスクリプト

詳解 シェルスクリプト