shell学习之命令行参数

我们在使用脚本的过程中,还得能够与使用者进行交互。其中一个方法就是可以使用命令行参数。

shell会将一些称为位置参数的特殊变量分配给输入到命令行中的 所有参数。这也包括shell所执行的脚本名称。位置参数变量是标准的数字:$0是程序名,$1是第 一个参数,$2是第二个参数,以此类推。参数之间用空格隔开。但是在第9个变量之后,你必须在变量数字周围加上花括号,比如${10}。

下面的shell从命令行接受一个参数$1,用来控制循环的输出“hello world”的次数。

输出:

我们来输入字符串试试:

命令 bash paramshell xin日志输出:

记住,每个参数都是用空格分隔的,所以shell会将空格当成两个值的分隔符。要在参数值中包含空格,必须要用引号(单引号或双引号均可)。

引号并非数据的一部分。它们只是表明数据的起止位置。

可以用$0参数获取shell在命令行启动的脚本名。这在编写多功能工具时很方便。

简单的我们可以输出刚刚那个脚本文件名。

输出:

但是你如果用另一种方式执行的,会收到奇怪的结果,文件前面多了一点东西。

当传给$0变量的实际字符串不仅仅是脚本名,而是完整的脚本路径时, 变量$0就会使用整个路径,不过我们可以使用basename来解决问题。

当然就像写程序一样,我们会判断空指针一样,在脚本中我们也会用-n测试来检查命令行参数$1中是否有数据(这个可能需要看shell的类型,有的会报错)。比如:if [ -n "$1" ]。

参数统计

特殊变量$#含有脚本运行时携带的命令行参数的个数。

shell学习之命令行参数_第1张图片

输出如下:

获取所有的参数

$*变量会将命令行上提供的所有参数当作一个单词保存。

$@变量会将命令行上提供的所有参数当作同一字符串中的多个独立的单词。这样 你就能够遍历所有的参数值,得到每个参数。

输出:

 

下节再续!

有什么讨论的内容,可以加我公众号:

你可能感兴趣的:(zookeeper)