Shell-Script
讀取驗證替代方案(兩個提示和 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 來做
至於現在,我更喜歡 Bash 自動化而不是 Ansible 自動化,因為 Ansible 有一個陡峭的學習曲線,而且它的文件(以及我購買的一些關於它的印刷書籍)對我學習如何使用它並不清晰或有用)。我也不喜歡使用 Docker 鏡像,然後在建構後更改它們。
我的問題
整個 Bash 腳本(我還沒有完整地帶到這裡)有點長,上面的“沉重”的文本使它明顯更長 - 但它主要是一個外觀問題。
我的問題
經過驗證的讀取操作是否有替代方案?一個既提示兩次又一次比較的實用程序?
shell函式怎麼樣?像
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
用於read
從“here 字元串”傳輸後面的變數名稱,這反過來又被使用,因為它比(也可以使用)“here 文件”更容易。
$2
包含提示(自由)文本,最後使用以允許(某種)“無限”文本長度。個人喜好使用大寫 TMP 和
[ ... ] &&
“sugar-syntax”(無論是什麼)。
if - then - fi
也可以使用,並且將消除將多個命令收集到一個命令中作為&&
分支執行的大括號的需要。