在編寫腳本的過程中,很多時(shí)候都需要我們?nèi)ピO(shè)置IP地址,密碼之類的變量,為了易用性,我們對(duì)這些變量的值都會(huì)提供選擇范圍或者設(shè)置隨機(jī)值以及默認(rèn)值等。
那么如果我們要判斷使用腳本的人有沒有輸入密碼應(yīng)該怎么做呢?下面看一個(gè)常見的例子:
#設(shè)置與檢測(cè)數(shù)據(jù)庫(kù)root密碼配置
root=`openssl rand -base64 8|md5sum|cut -c 1-8 `
read -p "請(qǐng)輸入密碼[ root ],默認(rèn)[ ${root} ]:" root_pass
然后我們運(yùn)行這段:

運(yùn)行結(jié)果
此時(shí)會(huì)出現(xiàn)兩個(gè)情況:
- 用戶輸入了自定義的密碼
- 用戶沒有輸入任何信息
首先我們對(duì)腳本進(jìn)行完善一下:
#設(shè)置與檢測(cè)數(shù)據(jù)庫(kù)root密碼配置
root=`openssl rand -base64 8|md5sum|cut -c 1-8 `
echo -e "請(qǐng)輸入密碼[ root ],默認(rèn)[ ${root} ]:n"
read root_pass
echo -e "當(dāng)前設(shè)置的密碼: [ $root_pass ]"
繼續(xù)運(yùn)行

執(zhí)行結(jié)果
此時(shí)可以看到,如果直接回車會(huì)出現(xiàn)一個(gè)空白的現(xiàn)象,而只有用戶輸入的情況下才能出現(xiàn)密碼,看到這有人會(huì)說:你都沒設(shè)置,有密碼才怪。的確,我還沒設(shè)置,下面設(shè)置一下:
#設(shè)置與檢測(cè)數(shù)據(jù)庫(kù)root密碼配置
root=`openssl rand -base64 8|md5sum|cut -c 1-8 `
echo -e "請(qǐng)輸入密碼[ root ],默認(rèn)[ ${root} ]:n"
read root_pass
if [[ -z "$root_pass" ]];then
root_pass=$root
fi
echo -e "當(dāng)前設(shè)置的密碼: [ $root_pass ]"
然后執(zhí)行:

出現(xiàn)了默認(rèn)(隨機(jī))密碼
然后到這里就解決了,看到這可能又有人迷惑了?就這?
別急,繼續(xù)往下看。
上面這個(gè)情況是只設(shè)置一個(gè)變量,但是如果需要設(shè)置好多呢?應(yīng)該怎么辦?一個(gè)設(shè)置加一個(gè)判斷?
NONONO,這樣太麻煩了,下面介紹一個(gè)比較簡(jiǎn)單的方法:定義函數(shù)
函數(shù)內(nèi)容如下:
input_check(){
#1參未需要設(shè)置的變量值[提供默認(rèn)變量]
#2參為這個(gè)參數(shù)的備注信息[例如:數(shù)據(jù)庫(kù)的root密碼]
#3參為一個(gè)隨機(jī)/默認(rèn)值
#4參為這個(gè)變量名
if [[ -z "$1" ]];then
echo -e "${red_zt}檢測(cè)到${2}沒有輸入,已使用默認(rèn)值[ ${3} ]${end}"
eval `echo "$4=$3"`
else
eval `echo "$4=$1"`
fi
}
如何使用呢?我們把上面的案例放進(jìn)去:
input_check(){
#1參未需要設(shè)置的變量值[提供默認(rèn)變量]
#2參為這個(gè)參數(shù)的備注信息[例如:數(shù)據(jù)庫(kù)的root密碼]
#3參為一個(gè)隨機(jī)/默認(rèn)值
#4參為這個(gè)變量名
if [[ -z "$1" ]];then
echo -e "${red_zt}檢測(cè)到${2}沒有輸入,已使用默認(rèn)值[ ${3} ]${end}"
eval `echo "$4=$3"`
else
eval `echo "$4=$1"`
fi
}
input(){
echo -e "$1"
read $2
}
root=`openssl rand -base64 8|md5sum|cut -c 1-8 `
input "請(qǐng)輸入密碼[ root ],默認(rèn)[ ${root} ]:" root_pass
input_check "$root_pass" "數(shù)據(jù)庫(kù)[root]密碼" "$root" "root_pass"
然后執(zhí)行:

通過函數(shù)判斷并設(shè)置變量值
有了這個(gè)函數(shù)之后,我們每次需要判斷一個(gè)值只需要按照傳參要求去調(diào)用即可實(shí)現(xiàn)默認(rèn)值和自定義值的配置,例如:
#設(shè)置與檢測(cè)數(shù)據(jù)庫(kù)root密碼配置
root=`openssl rand -base64 8|md5sum|cut -c 1-8 `
input "請(qǐng)輸入密碼[ root ],默認(rèn)[ ${root} ]:" root_pass
input_check "$root_pass" "數(shù)據(jù)庫(kù)[root]密碼" "$root" "root_pass"
#數(shù)據(jù)庫(kù)初始權(quán)限配置
input "是否關(guān)閉[ root ]用戶遠(yuǎn)程登錄[ y/n ],默認(rèn)[ y ]" dislogin
input_check "$dislogin" "數(shù)據(jù)庫(kù)[ root ]用戶登錄權(quán)限" "y" "dislogin"
#是否刪除測(cè)試數(shù)據(jù)庫(kù)
input "是否刪除[ test ]數(shù)據(jù)庫(kù)[ y/n ],默認(rèn)[ y ]" rm_db
input_check "$rm_db" "刪除[ test ]數(shù)據(jù)庫(kù)確認(rèn)" "y" "rm_db"
#結(jié)果匯總
red_z_green_z "數(shù)據(jù)庫(kù)[ root ]用戶密碼:" "[ $root_pass ]"
red_z_green_z "允許[ root ]遠(yuǎn)程登錄:" "[ $dislogin ]"
red_z_green_z "是否刪除[ test ]數(shù)據(jù)庫(kù):" "[ $rm_db ]"
input "是否繼續(xù)[回車?yán)^續(xù)]" Y
是不是打開了新大陸呢?其實(shí)還可以繼續(xù)改進(jìn)這個(gè)函數(shù),想了解更多的話關(guān)注我等待更新吧。
如果這篇文章能夠幫助到你的話請(qǐng)給個(gè)支持,來個(gè)三連吧;
如果你還有更好的解決方法可以在評(píng)論區(qū)展現(xiàn)你的強(qiáng)大技術(shù)能力,讓大家一起學(xué)習(xí)。
關(guān)注我,帶你進(jìn)入Shell腳本的世界,點(diǎn)擊下方“了解更多”即可看到我的腳本庫(kù)(有很多不錯(cuò)的函數(shù))。