私はこれread
をしました:
read -p "Please enter your name:" username
一行でユーザー名を確認するには?
1行で通常の方法で可能でない場合は、Bash関数を変数に入れるのが良い解決策でしょうか?
名前は単なる例であり、パスワードやその他の一般的な形式の値にすることができます。
ここで検証とは、ユーザーに名前を2回入力するように要求し、2つの値が同じであることを確認することを意味します。
答え1
ユーザーが同じ内容を2回入力(またはコピーして貼り付け...)するのは、通常2回の呼び出し、read
2つの変数、および比較によって行われます。
read -p "Please enter foo" bar1
read -p "Please enter foo again" bar2
if [ "$bar1" != "$bar2" ]; then
echo >&2 "foos did not match"
exit 1
fi
これはwhile
、ループ変数と条件変数を使用して一致するまでプロンプトと確認を繰り返すか、入力プロンプトが多い場合は関数呼び出しで抽象化できます。
答え2
thrigの回答を拡張し、要求された機能を含めるには、次のようにします。
機能
enter_thing () {
unset matched
while [[ -z "$matched" ]]; do
read -rp "Please enter $@: " thing1
read -rp "Please re-enter $@: " thing2
if [[ "$thing1" == "$thing2" ]]; then
matched=1
else
echo "Error! Input does not match" >&2
fi
done
echo "$thing2"
}
スクリプトでは、次のように呼び出すことができます。
username=$(enter_thing "name")
email=$(enter_thing "email")
password=$(enter_thing "password")