目录
- 注释
- 传入参数
- 函数
- 执行
- 调试
注释
- shebang符号:文件第一行,
#!
后面的路径会被作为解析器#!/bin/bash
- 单行注释:
#
以后的语句,shell不会解析。 - 多行注释:可以采用:
<<EOF。。EOF
传参
-
$0
表示执行的程序,是相对于执行目录的路径 -
$1 ,$2 ,$3
分别表示第几个参数。默认shell只支持9个参数,使用shift可以传递更多的参数。 -
$@,$*
表示所有的参数,不含$0
-
${#*}
和${#@}
表示位置参数的个数 - 通过
${*:1:3}
,${*:$#}
来表示多个参数。
$@PK $
-
$@
可以在函数之间传递参数,并不改变参数的排列- 比如`1 2 3 '4 5 "6 7" 8'。这个参数在经过多次传递后,依然表示4个参数
- 记得使用
"$@"
,不要直接使用$@
-
$*
会把参数打散。相对顺序不变,但是参数的个数就变成8个了。 - 演示方法
ff()
ff(){ ford in $@ "$@" $* "$*"; do echo $d ; done;};ff 1 2 '3 "4 5" 6' 7 "8 9"
函数
[function] name() {
...
- Function可以省略。除了可以在脚本文件中使用函数外,还可以shellI中定义。这些定义会在本次shell结束后消失。
- 如果没有
return
,返回值是最后一句指令的返回值。
执行方式
chmod u+x xxx.sh;./ xxx.sh
-
bash xxx.sh
(这种方式会开启一个sub shell
) -
source xxx.sh
(在 当前shell中执行.Xxx.sh
同义) -
eval
可以执行shell原义语句 -
exec
尽量不要使用,这会破坏当前的shell
debug
-
bash -x
(读取每一句,并执行,可以方便的看到执行的语句) -
set -x
在当前shell中调试,set +x
还原 -
trap
相关的信号,包括ERR
,DEBUG
等 trap 'cmd' ERR