初始化一个变量a=hello,那么如果想打印它的值,需要使用echo $a。
脚本的参数 引用脚本的参数n
脚本test.sh:
#!/bin/bash
echo $0 $1 $2 $3
屏幕输出情况。
没错,和你想的一样。数字变量0,保存的是这个执行脚本的名称,其他的数字1到n保存该脚本运行时的第1到第n个参数。
修改一下test.sh这个脚本
#!/bin/bash
echo "脚本$0的参数的个数为$#" echo "分别是:" echo $1 $2 $3
输出结果:
#号代表参数的个数,实际上在Bash中#代表个数的情况,并无只此一例,以后我们在讲字符串操作的时候还会见到。
继续修改脚本
#!/bin/bash
echo "脚本$0的参数的个数为$#" echo "分别是:" echo $@ echo $* 试试。
没错@,* 就是所有变量。从这里来看似乎两者没有差别。但是其实是不同的,通配符*将所有参数视作一个变量,而@则可以理解为所有参数的集合。
关于for循环,你可能还不理解,但是并没有关系,这里仅仅是简单的遍历。
#!/bin/bash
echo $* echo $@ echo "遍历不带引号的变量*" for i in $* do echo $i done echo "遍历带引号的变量*" for i in "$*" do echo $i done echo "遍历不带引号的变量@" for i in $@ do echo $i done echo "遍历带引号的变量@" for i in "$@" do echo $i done
看出来了没,当遍历的时候,可以发现,如果$@,$*都没有被引号包围,那么两者没有差别。但是如果有了引号,则不同。可以发现$*其实只是一个值而已。
最后一个参数_
#!/bin/bash
echo "脚本$0的参数的个数为$#" echo "分别是:" echo $@ echo "最后一个参数是$_"
输出结果:
其他特殊变量
用which检查某个命令是否存在,通过返回值可以了解。0代表成功,非0代表不成功。这可能与其他语言的思想相悖,但是也可以理解,毕竟成功的状态只有一个,而错误的情况却有许多种,所以用正数来标记错误状态。
当前进程的PID $
复制代码代码示例:
#!/bin/bash
echo "脚本$0的参数的个数为$#" echo "分别是:" echo $@ echo "最后一个参数是$_" echo "当前进程的PID为$$"
输出结果:
后台执行的最后一个命令的PID !
关于 >/deb/null 2>&1这部分会在以后输入输出重定向的时候讲到。它的功能是把火狐的各种终端输出丢进垃圾桶,不在屏幕上显示。
himBH是Bash的当然的默认选项,可以使用set -o打开某一选项,或者set +o来关闭某一选项。关于这几个选项的含义,超出本文叙述范围,偷笑超纲内容请同学们自行 |