读书笔记之101个脚本之No.4


 

 

今天的案例是将 对用户输入的判断的

The Code

#!/bin/sh

# validint -- Validates integer input, allowing negative ints too.

 

function validint

{

  # Validate first field. Then test against min value $2 and/or

  # max value $3 if they are supplied. If they are not supplied, skip these tests.

 

  number="$1";      min="$2";      max="$3"

 

  if [ -z $number ] ; then

    echo "You didn't enter anything. Unacceptable." >&2 ; return 1

  fi

 

  if [ "${number%${number#?}}" = "-" ] ; then  # is first char a '-' sign?

testvalue="${number#?}"     # all but first character

  else

    testvalue="$number"

  fi

 

  nodigits="$(echo $testvalue | sed 's/[[:digit:]]//g')"

 

  if [ ! -z $nodigits ] ; then

    echo "Invalid number format! Only digits, no commas, spaces, etc." >&2

    return 1

  fi

 

  if [ ! -z $min ] ; then

    if [ "$number" -lt "$min" ] ; then

       echo "Your value is too small: smallest acceptable value is $min" >&2

       return 1

    fi

  fi

  if [ ! -z $max ] ; then

     if [ "$number" -gt "$max" ] ; then

       echo "Your value is too big: largest acceptable value is $max" >&2

       return 1

     fi

  fi

  return 0

}

 

 

if validint "$1" "$2" "$3" ; then

  echo "That input is a valid integer value within your constraints"

fi

 

 

 

解析脚本:

1)number="$1";  min="$2"; max="$3"  指用户的3个输入;

2)nodigits="$(echo $testvalue | sed 's/[[:digit:]]//g')" 为后面测试用户输入的是否全为数字做准备

3)if validint "$1" "$2" "$3" ; then  注意"$1" "$2" "$3"要加引号。

4)testvalue变量是为了过滤负数后测试输入是否全为数字的。

5)感觉想得挺周全的。

 

 

 

 

本文出自 “你就当我是浮夸吧” 博客

相关内容

    暂无相关文章