ShellScript
Bash
Zsh
shell
ワンライナー
30
どのような問題がありますか?

この記事は最終更新日から1年以上が経過しています。

投稿日

更新日

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

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
ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
u1and0
Python, Go, Shellscript, Rust, JavaScript, Docker, Vagrant 開発環境はデスクトップUbuntu上に構築したDocker上のArchLinux。 shellはzsh, エディタはVim/Neovim派。csvもPDFもターミナル上で見たい派。 非情報系エンジニア、趣味で頑張っている。
この記事は以下の記事からリンクされています
koryoいろいろリンク集からリンク

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
新人プログラマ応援 - みんなで新人を育てよう!
~
データに関する記事を書こう!
~
30
どのような問題がありますか?
ユーザー登録して、Qiitaをもっと便利に使ってみませんか

この機能を利用するにはログインする必要があります。ログインするとさらに下記の機能が使えます。

  1. ユーザーやタグのフォロー機能であなたにマッチした記事をお届け
  2. ストック機能で便利な情報を後から効率的に読み返せる
ユーザー登録ログイン
ストックするカテゴリー