Shell指令碼測試合法化輸入

來源:互聯網
上載者:User

Shell指令碼測試合法化輸入    合法化輸入:只允許數字和字母    使用者常常會忽略掉說明,並且輸入錯誤的資料。作為一個Shell指令碼開發人員,你需要攔截並糾正這些錯誤。    典型情況是,你或許會遇見檔案名稱或是資料庫的鍵。你提示使用者要輸入一個全部由大小寫字母和數字組成的字串,沒有標點,沒有特殊字元,沒有空格。他們是否輸入正確了?這就是這個指令碼要測試的內容。 01validAlphaNum.sh02 # validAlphaNum.sh - 確保輸入只由數字、字母構成03  04 #!/bin/sh05  06 validAlphaNum()07 {08     # 合法化參數:都是大寫字母+小寫字母+數字,返回0;否則,返回109  10     # 刪除所有不可接受的字元11     compressed="$(echo $1 | sed -e 's/[^[:alnum:]]//g')"12  13     if [ "$compressed" != "$input" ]; then14         return 115     else16         return 017     fi18 }該函數的樣本用法。下面的代碼直接添加到 validAlphaNum.sh中: 01validAlphaNum.sh02 echo -n "輸入:"03 read input04  05 if ! validAlphaNum "$input"; then06     echo "輸入只能是字母和數字。" >&207     exit 108 else09     echo "輸入合法。"10 fi11  12 exit 0指令碼分析:   指令碼的邏輯是很明確的。首先,它用sed將輸入轉換為全新的。然後,比較了新的資料和原始的。如果2個完全相同,那麼非常完美。否則,轉換中丟失的資料就不屬於字元數位集合,所以原始輸入時非法的。   sed的特殊作用是處理不在POSIX字元類[:alnum:]中的資料。該字元類是所有大寫字母、小寫字母、數位集合。如果sed處理後的資料並不匹配之前的輸入,那麼所有字母數位移動揭示了這樣一個問題:在輸入字串(非法的)中有非數字字母的存在,然後函數會返回一個非0值。 運行指令碼:   這個指令碼本身是完備的。它會提示輸入,並通知你結果是否合法。這個函數的更典型的用法是放在一個指令碼或者一個庫的頭部。會在第12個指令碼中示範。   這個指令碼展示了一個非常好的一般性的shell指令碼編程技術:先寫下一個函數,然後緊接著就測試下。完畢後,再把這個函數放到一個更大、更完備的指令碼中。這樣,會給你以後省下不少事。 結果: ./validAlphaNum.sh 輸入:valid123SAMPLE輸入合法。./validAlphaNum.sh 輸入:this is most assuredly NOT valid, 12345 輸入只能是字母和數字。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.