第一章:The Missing Code Library--2.合法化输入
合法化輸入:只允許數(shù)字和字母
? ?用戶常常會(huì)忽略掉說明,并且輸入錯(cuò)誤的數(shù)據(jù)。作為一個(gè)Shell腳本開發(fā)人員,你需要攔截并糾正這些錯(cuò)誤。
? ?典型情況是,你或許會(huì)遇見文件名或是數(shù)據(jù)庫(kù)的鍵。你提示用戶要輸入一個(gè)全部由大小寫字母和數(shù)字組成的字符串,沒有標(biāo)點(diǎn),沒有特殊字符,沒有空格。他們是否輸入正確了?這就是這個(gè)腳本要測(cè)試的內(nèi)容。
該函數(shù)的示例用法。下面的代碼直接添加到validAlphaNum.sh中:
validAlphaNum.sh 1 echo -n "輸入:" 2 read input 3 4 if ! validAlphaNum "$input"; then 5 echo "輸入只能是字母和數(shù)字。" >&2 6 exit 1 7 else 8 echo "輸入合法。" 9 fi 10 11 exit 0腳本分析:
? ?腳本的邏輯是很明確的。首先,它用sed將輸入轉(zhuǎn)換為全新的。然后,比較了新的數(shù)據(jù)和原始的。如果2個(gè)完全相同,那么非常完美。否則,轉(zhuǎn)換中丟失的數(shù)據(jù)就不屬于字符數(shù)字的集合,所以原始輸入時(shí)非法的。
? ?sed的特殊作用是處理不在POSIX字符類[:alnum:]中的數(shù)據(jù)。該字符類是所有大寫字母、小寫字母、數(shù)字的集合。如果sed處理后的數(shù)據(jù)并不匹配之前的輸入,那么所有字母數(shù)字的移動(dòng)揭示了這樣一個(gè)問題:在輸入字符串(非法的)中有非數(shù)字字母的存在,然后函數(shù)會(huì)返回一個(gè)非0值。
運(yùn)行腳本:
? ?這個(gè)腳本本身是完備的。它會(huì)提示輸入,并通知你結(jié)果是否合法。這個(gè)函數(shù)的更典型的用法是放在一個(gè)腳本或者一個(gè)庫(kù)的頭部。會(huì)在第12個(gè)腳本中演示。
? ?這個(gè)腳本展示了一個(gè)非常好的一般性的shell腳本編程技術(shù):先寫下一個(gè)函數(shù),然后緊接著就測(cè)試下。完畢后,再把這個(gè)函數(shù)放到一個(gè)更大、更完備的腳本中。這樣,會(huì)給你以后省下不少事。
結(jié)果:
./validAlphaNum.sh 輸入:valid123SAMPLE 輸入合法。 ./validAlphaNum.sh 輸入:this is most assuredly NOT valid, 12345 輸入只能是字母和數(shù)字。?
?
轉(zhuǎn)載于:https://www.cnblogs.com/lalala23456/archive/2012/11/28/2792959.html
總結(jié)
以上是生活随笔為你收集整理的第一章:The Missing Code Library--2.合法化输入的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win2012R2安装net4.6.2失
- 下一篇: 京东方仍被边缘化!苹果又要让iPhone