私は単純なデフォルトの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
シェル機能はどうですか?良い
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つのコマンドにまとめてブランチとして実行するためにも使用でき、中括弧は必要ありません&&
。
答え2
私はそうします:
#!/bin/bash
while [[ $string != 'string' ]] || [[ $string == '' ]]
do
read -p "Please enter the domain of your web application: " string
echo "Please enter the domain of your web application: "
done
Command 1
Command 2
タイピングが少ない。
もちろん、すべての問題を解決するには、このようなセクションが必要です。
あなたの道と私の道以外に選択肢はありません。