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
- Bash shell编程<六>:处理用户输入
- 【shell】处理用户输入
- Linux学习-shell脚本编程基础之处理用户输入
- Linux命令行与shell编程笔记-13处理用户输入
- linux shell 处理用户输入
- shell---ch14处理用户输入
- [shell脚本学习]处理用户输入
- 第四章:shell处理用户输入
- shell read处理用户输入示例讲解
- shell编程中的输入参数处理
- Bash Shell 命令行处理
- Bash shell 字符串处理
- Bash shell 学习笔记六
- Bash shell编程<七>:处理选项、getopt命令
- Bash Shell编程
- BASH SHELL编程:
- Bash Shell编程
- bash shell的编程
- Codeforces 612B HDD is Outdated Technology 【水题】
- Linux 机器重启reboot命令
- Android下的屏幕适配
- log4j.properties配置与加载应用
- Android tips(三)-->android拍照相片旋转问题
- Bash shell编程<六>:处理用户输入
- 列出android 声卡
- Codeforces 612C Replace To Make Regular Bracket Sequence 【stack】
- Android Studio安装
- Java中ArrayList源码解析
- Educational Codeforces Round 5 C The Labyrinth DFS
- iOS 3D touch
- Git安装及配置
- 基于Dubbo框架构建分布式服务