合法化整型輸入指令碼

來源:互聯網
上載者:User

合法化整型輸入指令碼 正確化整型輸入看起來非常簡單,除非你想要確保負數也能作為輸入。問題就在於每一個數值只能有一個負號,且必須出現在數位頭部。本指令碼中的糾正程式能保證負數也能被正確的格式化好,更有甚者,本指令碼甚至可以把數字固定在使用者指定的範圍中。 01#!/bin/sh02  03 # validint.sh --正確化整型輸入,包括負的。04  05 function validint06 {07     # 正確化第一個域。08     # 如果使用者提供了$2和$3的話,那麼有: $2 <= 第一個域 <= $309  10     number="$1"; min="$2"; max="$3"11  12     if [ -z $number ]; then13         echo "無輸入。不可接受。" >&214         return 115     fi16  17     if [ "${number%${number#?}}" = "-" ]; then     # 看看第一個字元是不是負號18         testvalue="${number#?}"                    # 是的話就去掉它19     else20         testvalue="$number"21     fi22  23     nodigits="$(echo $testvalue | sed 's/[[:digit:]]//g')"24  25     if [ ! -z $nodigits ]; then26         echo "錯誤的數字格式!只有數字,不能有逗號、空格等" >&227         return 128     fi29  30     if [ ! -z $min ]; then31         if [ "$number" -lt "$min" ]; then32             echo "輸入的值太小:輸入的下限是 $min" >&233             return 134         fi35     fi36  37     if [ ! -z $max ]; then38         if [ "$number" -gt "$max" ]; then39             echo "輸入的值太大:輸入的上限是 $max" >&240             return 141         fi42     fi43     return 044 } 運行指令碼:    整個指令碼就是一個函數,完全可以拷貝到別的shell指令碼中去,或者是作為一個庫檔案。為了能夠在命令列執行這個檔案,簡單的增加幾行就行了: if validint "$1" "$2" "$3"; then     echo "That input is a valid integer value within your constraints" fi 運行結果: 01./validint.sh       02 無輸入。不可接受。03 ./validint.sh 1234.304 錯誤的數字格式!只有數字,不能有逗號、空格等05 ./validint.sh 103 1 10006 輸入的值太大:輸入的上限是 10007 ./validint.sh -17 0 2508 輸入的值太小:輸入的下限是 009 ./validint.sh -17 -20 2510 That input is a valid integer value within your constraints指令碼分析:   注意該指令碼中判斷第一個字元是不是負號的語句: if [ "${number%${number#?}}" = "-" ]; then   如果第一個字元是負號,那麼就把整數的數值部分賦給testvalue。然後這個非負的值就被去掉其中含有的所有數字,再測試剩下的東西。你可能會嘗試著將指令碼中的2個嵌套if語句用AND串連起來。比如下面的代碼看起來也能運行: if [ ! -z $min -a "$number" -lt "$min" ]; then    echo "輸入的值太小:輸入的下限是 $min" >&2    exit 1fi   但事實上它並不能如期運行,因為在一個shell指令碼中,你並不能保證AND語句串連的第二個測試條件一定不會被測試,即使AND前的第一個測試已經證明為False了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.