検証の代替を読む(ヒント2つとif-then比較の代替)

検証の代替を読む(ヒント2つとif-then比較の代替)

私は単純なデフォルトのApache仮想ホストファイル(新しいWebアプリケーションを構築するたびに使用する必要があります)を生成する小さなスクリプトを生成しようとしています。

read認証された操作では、このスクリプトはWebアプリケーションのdomain.tldとそのデータベースの資格情報の入力を求めます。

read -p "Have you created db credentials already?" yn
case $yn in
    [Yy]* ) break;;
    [Nn]* ) exit;;
    * ) echo "Please create db credentials and then comeback;";;
esac

read -p "Please enter the domain of your web application:" domain_1 && echo
read -p "Please enter the domain of your web application again:" domain_2 && echo
if [ "$domain_1" != "$domain_2" ]; then echo "Values unmatched. Please try again." && exit 2; fi

read -sp "Please enter the app DB root password:" dbrootp_1 && echo
read -sp "Please enter the app DB root password again:" dbrootp_2 && echo
if [ "$dbrootp_1" != "$dbrootp_2" ]; then echo "Values unmatched. Please try again." && exit 2; fi

read -sp "Please enter the app DB user password:" dbuserp_1 && echo
read -sp "Please enter the app DB user password again:" dbuserp_2 && echo
if [ "$dbuserp_1" != "$dbuserp_2" ]; then echo "Values unmatched. Please try again." && exit 2; fi

私がBashを使う理由

今はAnsibleオートメーションよりBashオートメーションを好む。なぜなら、Ansibleは学習曲線が急であり、関連文書(および私が購入したいくつかの印刷された本も含む)が不明であるか、使用方法を学ぶのに混乱しているからです。私はDockerイメージを使用し、ビルド後にそれを変更することも好きではありません。

私の質問

完全なBashスクリプト(ここにすべてを入れていない)は少し長く、上記の「重い」テキストのためにはるかに長くなります。しかし、これは主に外観上の問題です。

私の質問

読み取り操作を確認する代わりに使用できる方法はありますか? 2つの性別比較を2回表示するユーティリティ?

関連: ここで文字列と比較するには$ 1と$ 2が必要です。

ベストアンサー1

シェル機能はどうですか?良い

function read_n_verify  {
    read -p "$2: " TMP1
    read -p "$2 again: " TMP2
    [ "$TMP1" != "$TMP2" ] &&
    { echo "Values unmatched. Please try again."; return 2; }
    read "$1" <<< "$TMP1"
}
read_n_verify domain "Please enter the domain of your web application" 
read_n_verify dbrootp "Please enter the app DB root password" 
read_n_verify dbuserp "Please enter the app DB user password"

$domain次に、を使用して目的の$dbrootp操作を実行します$dbuserp

$1「string here」では、次の変数名を転送するために使用されます。readこれは "document here"よりも簡単なので(使用することもできます)使用されます。

$2プロンプト(無料)テキストが含まれており、(やや)「無制限」のテキスト長を許可するために最後に使用されます。

大文字で示されたTMPと[ ... ] &&「砂糖フレーズ」(何でも)は個人的な好みに応じて使用されます。

if - then - fi複数のコマンドを1つのコマンドにまとめてブランチとして実行するためにも使用でき、中括弧は必要ありません&&

おすすめ記事