2016-04-08 85 views
2

我有一個bash腳本,它的一個功能是檢查字符串(密碼)的長度。密碼需要有特殊字符。我使用$ {#VAR}來檢查字符串是否合適,但是正在解釋特殊字符,因此計數已關閉。下面是有問題的代碼:在Bash scipt中打印特殊字符

userpass="$1" 

if [[ "${#userpass}" -lt 8 ]]; then 
    echo 'Short Password' 
fi 

字符串像Q7cS $ ZpR8eSi和pNbTb $ IhkyUouDcZ行程起來(以美元符號或符號的任何東西)。我已經使用wc -c代替也試過,但我得到了同樣的問題

+3

你有單引號引用的字符串。不清楚你如何餵食'$ 1',但假設cmd線,你必須做'./myPswdChkr.sh'Q7cS $ ZpR8eSi''。模型外殼的Pluse-uno Q.簡潔幷包含示例輸入!祝你好運。 – shellter

+0

感謝您的建議,我的問題是密碼是可變的。該腳本用於檢查密碼的複雜性以及它是否遵守組織的密碼策略。用戶將輸入./myPswdChkr.sh他們的密碼,腳本會告訴他們密碼是否合適。 –

+0

我無法重現該問題。 '爲userpass = '$ pNbTb IhkyUouDcZ'; echo $ {#userpass}'輸出:'16' – Cyrus

回答

0

這不起作用:

./myPswdChkr.sh theirpa$sword 

因爲參數傳遞給腳本之前可變插值發生。 myPswdChkr.sh只收到theirpa

./myPswdChkr.sh 'theirpa$sword' 

正如@shellter說,它會如果用戶在使用腳本時把圍繞他們的密碼單引號工作。 。 。但實際上,這是一個可怕的想法,因爲這樣他們的明文密碼就會保存在命令歷史中。

相反,不帶參數運行腳本,只是 ./myPswdChkr.sh,然後提示用戶輸入腳本里面的密碼:

echo -n 'PlsEntrYrPswd: ' 
read userpass 
if [[ "${#userpass}" -lt 8 ]]; then 
    echo 'Short Password' 
fi