Help us understand the problem. What is going on with this article?

bash, zshでyes/no判定をするワンライナー

More than 1 year has passed since last update.

bash

case文分岐

ググるとよく出てくるやつです。

bashでyN聞く(基本型)
read -p "ok? (y/N): " yn
case
  "$yn" in [yY]*) echo hello;;
  *) echo "abort";;
esac
bashでyN聞く(ワンライナー)
read -p "ok? (y/N): " yn; case "$yn" in [yY]*) echo hello;; *) echo "abort";; esac

'yno'とか受け付けると、一文字目がyなのでhelloが出力されます。

参考: シェルスクリプトでY又Nの入力のみ受け付ける機能を作る
参考: BASHシェルスクリプトで「キー入力待ち」プロンプトを実装する

入力受付一文字のみ

一文字だけ、yとかnとか押したら即座に次に進んでほしいとき、readコマンドのオプション-nを使用します。
Enterだけ押すと$ynの中が空になるので、abortと表示されます。

bashでyN聞く(入力1文字だけ)
read -n1 -p "ok? (y/N): " yn; case "$yn" in [yY]*) echo hello;; *) echo "abort";; esac

if文分岐

テストコマンド[をダブルで使う、つまり[[が重要です。

bashでyN聞く(if文を使う)
read -n1 -p "ok? (y/N): " yn
if [[ $yn = [yY] ]]; then
  echo hello
else
  echo abort
fi
bashでyN聞く(if文を使うワンライナー)
read -n1 -p "ok? (y/N): " yn; if [[ $yn = [yY] ]]; then echo hello; else echo abort; fi

if then&&
else は ||
に置き換えられるので、下のようにして更に短くできます。
これが一番短くて良いと思います。

bashでyN聞く(testコマンドを使うワンライナー)
read -n1 -p "ok? (y/N): " yn; [[ $yn = [yY] ]] && echo hello || echo abort

チルダを使ってもyとYをまとめて判定してくれます。

bashでyN聞く(testコマンドとチルダを使うワンライナー)
read -n1 -p "ok? (y/N): " yn; [[ $yn =~ y|Y ]] && echo hello || echo abort

参考: bashでif に正規表現を使った文字列マッチ条件分岐

zsh

zshでy/Nを聞く場合はよりシンプルです。
変数を用意する必要もなければ、プロンプト表示オプション-pもありません。
ifステートでread -qを書くだけで一文字bashのread -n1とcaseによる条件分岐と同じ意味になってくれます。

zshでyN聞く(基本型)
echo "ok?(y/N): "
if read -q; then
  echo hello
else
  echo abort
fi
zshでyN聞く(ワンライナー)
echo "ok?(y/N): "; if read -q; then; echo hello; else echo abort; fi

if then&&, else||に置き換えれば更にシンプルになります。

zshでyN聞く(if文を使わないワンライナー)
echo "ok?(y/N): "; read -q && echo hello || echo abort
Why do not you register as a user and use Qiita more conveniently?
  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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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