未分类
shell 命令行参数
命令行参数 $0 表示程序名。 $1 至 9则是位置参数。9则是位置参数。# 表示参数的个数。 \* 将所有参数当做一个整体来引用 @ 把每个参数作为一个字符串返回,可以使用for循环来遍历 ? 最近一个执行的命令的退出状态。0表示执行成功?最近一个执行的命令的退出状态。0表示执行成功_ 上一个命令的最后一个参数。使用快捷键 ESC+. 也是这个效果 位置参数 位置参数不止9个,更多的参数也是一样支持的。只是要使用${10}这样的形式引用。 $1 和 ${1}的效果是一样的。 不用花括号的话,$10 会被认为是 $1 和一个字符 0。 带空格的参数值 每个参数都是用空格分隔的。要在参数值中包含空格,必须要使用引号(单引号或双引号都可)。 将文本字符串作为参数传递时,引号并非数据的一部分。它们只是表明数据的起止位置。 获取脚本名 $0 表示脚本名,但是不同的调用方法返回的结果也是不同的。下面的脚本就是简单的打印$0的值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ cat filename.sh #!/bin/bash echo $0 $ ./ filename.sh -bash: ./: 是一个目录 $ cat filename.sh #!/bin/bash echo $0 $ ./filename.sh ./filename.sh $ bash filename.sh filename.sh $ bash /root/filename.sh /root/filename.sh |
使用 basename 命令 如果要使用脚本名称来进行判断,可以先用命令 basename 把路径的信息给过滤掉。命令的效果如下:
1 2 |
$ basename /var/log/messages messages |
所以上面的脚本可以修改成这样:
1 2 3 4 5 6 7 8 9 |
$ cat filename.sh #!/bin/bash echo $(basename $0) $ ./filename.sh filename.sh $ bash filename.sh filename.sh $ bash /root/filename.sh filename.sh |
测试参数 在脚本中使用参数要确保参数存在,否则运行时有可能会报错:
1 2 3 4 5 6 7 |
$ cat add.sh #!/bin/bash echo $1 + $2 = $[ $1 + $2 ] $ ./add.sh 1 2 1 + 2 = 3 $ ./add.sh 1 ./add.sh:行2: 1 + : 语法错误: 期待操作数 (错误符号是 "+ ") |
如果只是当做字符串引用,也不会报错。没有传参的参数默认都是空:
1 2 3 4 5 6 7 8 9 |
$ cat hello.sh #!/bin/bash echo Hello $1 $2. $ ./hello.sh Tom Jerry Hello Tom Jerry. $ ./hello.sh Jerry Hello Jerry . $ ./hello.sh Hello . |
判断参数是否存在 在 shell 中利用 -n Read more…