shell脚本练习题

remainder=$((thousand00)) while [ ${#remainder} –lt 3 ];do

#${#remainder} # 避免remainder

为remainder串的长度

remainder=0$remainder 为00x时的丢0情况。

done

thousand=$(($thousand/1000))

#以下四句可用一句表示:result=‖${TD:=”,”}$remainder$result‖ # 上面蓝色部分表:若TD非空则返回TD,否则将”,”赋给TD.

if [ –z $TD ] ; then # 判断用户是否自定义整数分隔符, 若 空

TD=, fi result=‖$TD$remainder$result‖ 顺序

done

# 与分隔符合成串。 注意

}

if [ –n $thousand ]; then # 若 非空

result=‖$thousand$result‖

elif [ ${result%${result#?}} = ―$TD‖ ]; then result=‖${result#?}‖ fi

echo $result

脚本标志参数处理命令: getopts ―‖ var 带两个参数,第一个参数为带解析的 参数标志序列串(如-f,-c等), 以冒号(:)分隔各标志,且以冒号:结束

第二个参数为:变量,每执行一次存放 参数标志序列串中的一个标志字符 返回值:未解析结束返回0,解析结束返回1

涉及的内定变量:$OPTARG 每次解析标志对应的参数值 便默认存放在此变量内。

$OPTIND 当各标志处理无误情况下,该数值指示当前用到的最大位置参数($#)。

此值使用容易出错(若参数的判断不完善时), 还不如用 $#

另外 $1, $2, $3, $4, ===> 此时 $# 等于 4, 当执行shift 1 时, 各个位置参数的值向一次向左右1次,此时 $1的值 为原$2的值

当执行shift 2 时, 各个位置参数的值向一次向左右2次,此时 $1的值 为原$3的值。

完整代码 ------- nicenumber.sh --------------------------- nicenumber()

..... # 函数实现部分

#处理脚本标志参数

while getopts ―d:t:‖ opt do

case $opt in # $opt 为 具体的标志字符 d ) DD=‖$OPTARG‖ ;; # $OPTARG 为标志指定的参数值 t ) TD=‖$OPTARG‖ ;; * ) echo ―no arg-flag: $opt‖ >&2 ; exit 1 esac done

# 当脚本接收如此多的参数时,$1将不代表脚本最终要处理的大数字,所以做如下操作。

shift $(($OPTIND - 1))

nicenumber $1 exit 0

----------------------------------------------------------------

扩展:

1.不同国家整数与小数的分隔符不同,使脚本能够处理各种整数与小数各种分隔符情况。在传给脚本参数时需指定标志-d

程序中仅需在 分隔 整数与小数部分略修改为

integer=$

>>灞曞紑鍏ㄦ枃<<
12@gma联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4