Bash shell编程<六>:处理用户输入

来源:互联网 发布:手机淘宝充值中心没有 编辑:程序博客网 时间:2024/06/11 22:55

读取参数

bash shell将在命令行中输入的所有参数赋值给一些特殊变量,这些变量称为位置参数。其中还包括shell程序的名称。位置参数如下表示$0为程序名称,$1为第一个参数,$2为第二个参数,以此类推,$9为第九个参数
先看一个简单的栗子

#!/bin/bashvar=1;for (( i=1; i<= $1 ; i++ ))do    var=$[ $var * $i]doneecho the factorial of $1 is $var

每个参数都是通过空格(多个空格也行)分隔的,要想在参数中包含空格,就必须使用单引号或双引号,见下面栗子

#!/bin/bashecho $1
./test1 Rich Blum./test1 'Rich Blum'

如果脚本需要的命令行参数多余9个,那么可以继续在命令行中添加命令行参数,在第9个变量后,必须这样表示以后的参数,如第10个参数,${10},看一个栗子

#!/bin/bashvar=$[ ${10} * ${11} ]echo $var

读取程序名称

先看一个栗子

#!/bin/bashecho the script is : $0

然后这样执行

./test3 #会打印./test3/home/david/test3  #会打印/home/david/test3

可以看出传递给变量$0的字符串实际上是程序的完整路径,而不仅仅是程序的名称,而basename只获取程序的名称,不带路径

#!/bin/bashname=`basename $0`echo the script is : $name

现在使用这个方法编写基于使用的脚本的名称来执行不同功能的脚本,如下

#!/bin/bashname=`basename $0`if [ $name = "addem" ]then    total=$[ $1 + $2 ]elif [ $name = "multem" ]then    total=$[ $1 * $2 ]fiecho the value is $total

之后复制一份,并改名即可执行不同的功能了

测试参数

在shell脚本中使用命令行参数时要非常小心,如果执行脚本时缺少参数,会产生很糟的结果,好的方法是对参数进行检查来保证使用参数前确定存在数据

#!/bin/bash#刚开始写这个脚本时忘了加双引号,试试会发生什么if [ -n "$1" ]then    echo hello $1,glad to meet youelse    echo "sorry,you didnt know you "fi

特殊的参数变量

可以不必测试每个参数,而只对命令行中输入的参数个数进行计数。特殊变量$#中存储执行脚本时包含的命令行参数的个数

#!/bin/bashecho there is $# parameters supplied

现在可以在使用参数前测试现有的参数个数

#!/bin/bashname=`basename $0`if [ $# -ne 2 ]then    echo usage: $name less parameterselse    total=$[ $1 + $2 ]    echo total is $totalfi

${$#}似乎可以用来表示最后一个命令行参数,可以使用\${!#}来表示最后一个参数.

#!/bin/bashparams=$##echo the last parameter is ${$#}会出错echo the total params is $paramsecho the last parameter is ${!#}

还要注意若没有参数时,$#返回0,而${!#}返回脚本名称

获取所有数据

变量$*和$@这两个变量都是在一个变量中包含所有命令行参数

#!/bin/bashecho "Using the \$* method is : $*"echo "Using the \$@ method is : $@"

但是有区别,看下面栗子

#!/bin/bashcount=1for para in "$*"do    echo "\$* param #$count = $para"    count=$[ $count + 1 ]donecount=1for para in "$@"do    echo "\$@ param #$count = $para"    count=$[ $count + 1 ]done

只有把$*和$@被双引号包起来的时候才会有差异,可以知道变量$*将所有参数视作一个单词,而变量$@分别对待每个参数,上面的程序若不用双引号则是没有差异的

移位

bash shell通过shift命令来帮助操作命令行参数,shift命令能够改变命令行参数的相对位置,使用shift命令时,默认将每个参数变量左移一个位置。于是,变量$3的值移给变量$2,变量$2的值移给变量$1,而变量$1的值被丢弃(注意变量\$0的值和程序名称都不变)

#!/bin/bashcount=1while [ -n "$1" ]do    echo "#$count = $1"    count=$[ $count + 1]    shiftdone

测试

./test12 ni hao hello

可以通过shfit命令提供一个参数来实行多位移变化,提供需要移动的位置数目即可

#!/bin/bashecho "the origin paras is : $*"shiftecho "here is the new first para: $1"

测试

./test16 1 2 3 4 5
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 药监局查到过期药品怎么办 血管粥样硬化怎么办 化疗后血管硬化怎么办 牛油果没熟切开了怎么办 切开的牛油果没熟怎么办 牛油果打开不熟怎么办 牛油果切开不熟怎么办 牛油果没有熟怎么办 舌头上有白点怎么办 仇人追我怎么办gl 瑞和宝被锁了怎么办 微哨无法下线怎么办 Ppt版本不一样打不开怎么办 ps文件太大打不开怎么办 想代理皮肤药怎么办 按摩店办理执照怎么办 高考考太差怎么办 面对无耻的亲戚怎么办 学霸考试失利怎么办 学霸考试没考好怎么办 买不到华佗止痒怎么办 在众人面前出丑怎么办 淘宝买了假货怎么办 网上客服没人理怎么办 京东618受不了货怎么办 陌陌注销找不回怎么办 客人买东西没给钱怎么办 note5笔丢了怎么办 京东第三方卖家拍下后没货怎么办 卖假牛栏山逮到怎么办 京东标识不合格怎么办 买到疑似假货怎么办 买到三无食品怎么办 顾不买你的商品怎么办 用了假货面膜怎么办 面膜买到假货怎么办 美团找不到订单怎么办 电子发票没收到怎么办 普通发票跳号了怎么办 一个月发票不够怎么办 微信扫码寄顺丰快递没有数据怎么办