#!/bin/bash judge() #定义函数 { signed=""#初始化 integer=$1 min=$2 max=$3 #判断是否为负数,第一个字符是否为-。如是,则判断后面的是否为整数;若非负,则判断是否为整数。 if [ "$(echo $1 | cut -c1)" = "-" ] then signed="-" integer="${integer#?}"#${variable#pattern}把variable中的内容去掉左边最短的匹配模式,?表示仅与一个任意字符匹配 fi if [ -z "$integer" ] #只有一个符号没有数字是非法的 then echo"Invalid input, just a '-' is not allowed" >&2 #>&2可以将错误输出指定文件。 return 1 fi #判断是否都是数字组成。 if [ -n "$(echo $integer | sed 's/[[:digit:]]//g')" ] #判断是否为数字 then echo"Invalid integer, it includes some char but digit" >&2 return 1 fi integer="$signed$integer" #范围判断,当min和max为空时(即未传范围),默认为$integer。 if [ $integer -lt ${min:=$integer} ] #-lt表示小于 then#":="代表若min值为空则赋值成默认的integer,若min已被赋值则为不再以integer赋值 echo"$integer is too small,it should greater than $min" >&2 return 1 fi if [ $integer -gt ${max:=$integer} ] #-lt表示大于, ":="的用法同上 then echo"$integer is too large,it should little than $max" >&2 return 1 fi return 0 } #主程序 #判断传参的合法性 if [ $1 -eq 0 ] then echo"you could not do nothing" >&2 exit 1 fi if judge "$1""$2""$3"#三个参数,$2和$3表范围可以缺省 then echo"your input integer is valid" fi