Linux——Shell脚本参数传递的2种方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux——Shell脚本参数传递的2种方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3253字,纯文字阅读大概需要5分钟。
内容图文
![Linux——Shell脚本参数传递的2种方法](/upload/InfoBanner/zyjiaocheng/942/175783340dc5495d8ec1b3c13f2ed5bf.jpg)
前言
平时会遇到很多脚本都有参数选项,类似:
./test.sh -f config.conf -v --prefix=/home
这种脚本怎么写呢?
一、Shell 特殊参数解释
?首先来看几个特殊变量:$0, $#, $*, $@, $?, $$, $_- 示例1:新建一个test.sh的文件
#!/bin/bash echo $0 # 当前脚本的文件名(间接运行时还包括绝对路径)。 echo $n # 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1 。 echo $# # 传递给脚本或函数的参数个数。 echo $* # 传递给脚本或函数的所有参数。 echo $@ # 传递给脚本或函数的所有参数。被双引号 (" ") 包含时,与 $* 不同,下面将会讲到。 echo $? # 上个命令的退出状态,或函数的返回值。 echo $$ # 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。 echo $_ # 上一个命令的最后一个参数 echo $! # 后台运行的最后一个进程的 ID 号
执行结果如下:
$ ./test.sh test test1 test2 test3 test4 ./test.sh # $0 # $n 5 # $# test test1 test2 test3 test4 # $* test test1 test2 test3 test4 # $@ 0 # $? 12305 # $$ 12305 # $_ # $!
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号 ("") 包含时,都以"$1""$2" … "$n" 的形式输出所有参数。
但是当它们被双引号 ("") 包含时,"$*"会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@"会将各个参数分开,以"$1""$2" … "$n" 的形式输出所有参数。
二、方法1:$0,$1,$2..
采用$0,$1,$2..等方式获取脚本命令行传入的参数,值得注意的是,$0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用${10},${11}....才能获取到参数。
- 示例2:新建一个test.sh的文件
#!/bin/bash echo "脚本$0" echo "第一个参数$1" echo "第二个参数$2"
执行结果如下:
$ ./test.sh 1 2 #shell中将会输出: 脚本./test.sh 第一个参数1 第二个参数2
- 示例3:参数超过10个的情况,在test.sh文件写入
#!/bin/bash echo "脚本名$0" echo "第一个参数$1" echo "第二个参数$2" echo "第三个参数$3" echo "第四个参数$4" …… echo "第十个参数$10" echo "第十个参数${10}"
执行结果如下:
$ ./test.sh a b c d e f g h i j #shell中将会输出: 脚本名./test.sh 第一个参数a 第二个参数b 第三个参数c 第四个参数d 第五个参数e 第六个参数f 第七个参数g 第八个参数h 第九个参数i 第十个参数j
优点:获取参数更容易,执行脚本时需要的输入少
缺点:必须按照顺序输入参数,如果中间漏写则参数对应就会错误
三、方法2:getopts
语法格式:getopts [option[:]] [DESCPRITION] VARIABLE
option:表示为某个脚本可以使用的选项
":":如果某个选项(option)后面出现了冒号(":"),则表示这个选项后面可以接参数(即一段描述信息DESCPRITION)
VARIABLE:表示将某个选项保存在变量VARIABLE中
- 示例4:新建一个test.sh文件
while getopts ":a:b:c:" opt do case $opt in a) echo "参数a的值$OPTARG" ;; b) echo "参数b的值$OPTARG" ;; c) echo "参数c的值$OPTARG" ;; ?) echo "未知参数" exit 1;;:)
echo "没有输入任何选项 $OPTARG"
;;
esac done
用一个while循环加case分支获取不同参数,:a:b:c相当于定义参数的变量名,有时候可能会有未知参数,所以增加一个?的分支。
执行结果如下:
$ ./test.sh -a 1 -b 2 -c 3 #在shell中的输出 参数a的值1 参数b的值2 参数c的值3
$ ./test.sh -a 1 -c 3 #在shell中的输出 参数a的值1 参数c的值3
$ ./test.sh -a 1 -c 3 -d 4 #在shell中的输出 参数a的值1 参数c的值3 未知参数
优点:由于使用了-a加参数值的方式进行一一匹配,所以不会参数匹配错误,同时也可以缺省参数,并不会导致参数错误,同时也便于后期参数的扩展和移植
缺点:脚本执行时参数需要的输入会增多
内容总结
以上是互联网集市为您收集整理的Linux——Shell脚本参数传递的2种方法全部内容,希望文章能够帮你解决Linux——Shell脚本参数传递的2种方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。