我有一個關于while回圈的問題。我一直在搜索,但我找不到任何可以幫助的東西。我可能錯過了什么。我對shell有點陌生。我正在嘗試驗證用戶密碼,以確保它是正確的。我能夠得到它的一部分,但是一旦用戶輸入了他們的密碼,回圈就退出了。我想讓回圈繼續下去,直到它完成。下面我附上了我所擁有的東西。我知道我遺漏了什么,只是我不確定。我能夠創建一個無限回圈,但我無法弄清其余的問題。
read -p "請輸入新用戶名?"用戶
讀 -p "輸入密碼: " password
讀 -p "重新輸入密碼: "驗證
if [ "$password"/span> != "$verify"/span> ]
然后
echo "密碼不匹配。請再試一次。"
else
echo "密碼成功!!"
fi
uj5u.com熱心網友回復:
如果你仍然被卡住,從評論中繼續,你要做的是簡單地將你的代碼包裹在一個連續的回圈中,并在密碼匹配時提供一個break陳述句。一個方便的連續回圈的形式是:
while :
do : do
##你的代碼在這里。
done
':'運算子在每次迭代時測驗true。
你可以重新安排你的if陳述句為if [ "$password" = "$verify" ],然后輸出成功和break來終止(例如跳出回圈)。不需要else部分。如果密碼不匹配,只需輸出錯誤資訊并再次回圈即可。
另一個改進是使用printf而不是echo(在所有情況下)。printf函式要好得多,它提供了與man 3 printf for C相同的輸出格式控制
把它放在一起,你可以做:
#!/bin/sh。
while : ##回圈不斷。
do : ##回圈不斷。
讀 -p "輸入用戶名:" user
讀 -p "輸入密碼:" password
讀 -p "重新輸入密碼 : "驗證
if [ "$password"/span> = "$verify"/span> ] ##檢查是否匹配。
then
printf "
密碼成功!!
"
break。
fi
##否則再次回圈。
printf "
錯誤。密碼不匹配。請再試一次。
" >&2
done
使用/輸出示例
$ sh pwchk.sh
輸入用戶名 : myUser
輸入密碼 : myGoodPass
重新輸入密碼 : myBadPass
錯誤。密碼不匹配。請再試一次。
輸入用戶名 : myUser
輸入密碼 : myGoodPass
再次輸入密碼 : myGoodPass
密碼成功!!
請看一下,如果你有進一步的問題,請告訴我。
uj5u.com熱心網友回復:
你沒有一個回圈,但你可以通過以下方式添加一個:
你沒有一個回圈,但你可以通過以下方式添加一個回圈:
讀 -p "請輸入新的用戶名?" 用戶
while -p
讀取 -p "輸入密碼: " password
讀 -p "重新輸入密碼: "驗證
test "$password"/span> != "$verify"/span>
do
echo "密碼不匹配。請再試一次。" >&2
done
這在處理EOF方面有點馬虎,所以你可能想用以下方法檢查讀數:
這在處理EOF方面有點馬虎。
#!/bin/sh
讀 -p "請輸入新的用戶名?" user || exit
while
讀取 -p "輸入密碼:"密碼
&& 讀 -p "重新輸入密碼: "驗證
&& test "$password"/span> != "$verify"/span>
do
echo "密碼不匹配。請再試一次。" >&2
done
你可能想在輸入密碼時抑制密碼的列印,你可以這樣做:
你可能想在輸入密碼時抑制密碼的列印。
#!/bin/sh
trap 'stty echo'/span> EXIT
讀 -p "請輸入新的用戶名?" user || exit
while
stty -echo echonl
讀 -p "輸入密碼: " password
&& 讀 -p "重新輸入密碼: "驗證
&& test "$password"/span> != "$verify"/span>
do
echo "密碼不匹配。請再試一次。" >&2
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/309921.html
標籤:
