第一章:The Missing Code Library--2.合法化輸入

   合法化輸入:只容許數字和字母
   用戶經常會忽略掉說明,而且輸入錯誤的數據。做爲一個Shell腳本開發人員,你須要攔截並糾正這些錯誤。

   典型狀況是,你或許會碰見文件名或是數據庫的鍵。你提示用戶要輸入一個所有由大小寫字母和數字組成的字符串,沒有標點,沒有特殊字符,沒有空格。他們是否輸入正確了?這就是這個腳本要測試的內容。 shell

validAlphaNum.sh
 # validAlphaNum.sh - 確保輸入只由數字、字母構成
 
 #!/bin/sh
 
 validAlphaNum()
 {
     # 合法化參數:都是大寫字母+小寫字母+數字,返回0;不然,返回1
 
     # 刪除全部不可接受的字符
     compressed="$(echo $1 | sed -e 's/[^[:alnum:]]//g')"
 
     if [ "$compressed" != "$input" ]; then
         return 1
     else
         return 0
     fi
 }
該函數的示例用法。下面的代碼直接添加到 validAlphaNum.sh中:

validAlphaNum.sh
 echo -n "輸入:"
 read input
 
 if ! validAlphaNum "$input"; then
     echo "輸入只能是字母和數字。" >&2
     exit 1
 else
     echo "輸入合法。"
 fi
 
 exit 0

腳本分析:
   腳本的邏輯是很明確的。首先,它用sed將輸入轉換爲全新的。而後,比較了新的數據和原始的。若是2個徹底相同,那麼很是完美。不然,轉換中丟失的數據就不屬於字符數字的集合,因此原始輸入時非法的。
   sed的特殊做用是處理不在POSIX字符類[:alnum:]中的數據。該字符類是全部大寫字母、小寫字母、數字的集合。若是sed處理後的數據並不匹配以前的輸入,那麼全部字母數字的移動揭示了這樣一個問題:在輸入字符串(非法的)中有非數字字母的存在,而後函數會返回一個非0值。 數據庫

運行腳本:
   這個腳本自己是完備的。它會提示輸入,並通知你結果是否合法。這個函數的更典型的用法是放在一個腳本或者一個庫的頭部。會在第12個腳本中演示。
   這個腳本展現了一個很是好的通常性的shell腳本編程技術:先寫下一個函數,而後緊接着就測試下。完畢後,再把這個函數放到一個更大、更完備的腳本中。這樣,會給你之後省下很多事。 編程

結果: 函數

./validAlphaNum.sh 輸入:valid123SAMPLE 輸入合法。
./validAlphaNum.sh 輸入:this is most assuredly NOT valid, 12345 輸入只能是字母和數字。
相關文章
相關標籤/搜索