使用bash,和其他大多数的编程语言一样,bash
也支持if
, case
, while
和 for
这些控制流关键字。同样地, bash
也支持函数,它可以接受参数并基于参数进行操作。
bash中的特殊变量
与其他脚本语言不同的是,bash使用了很多特殊的变量来表示参数、错误代码和相关变量。
$0
- 脚本名$1
到$9
- 脚本的参数。$1
是第一个参数,依此类推。$@
- 所有参数$#
- 参数个数$?
- 前一个命令的返回值$$
- 当前脚本的进程识别码!!
- 完整的上一条命令,包括参数。常见应用:当你因为权限不足执行命令失败时,可以使用sudo !!
再尝试一次。$_
- 上一条命令的最后一个参数。如果你正在使用的是交互式 shell,你可以通过按下Esc
之后键入 . 来获取这个值。
函数定义与调用
使用function关键字或者直接将函数名与花括号括起来定义一个函数,调用函数时,只需要使用函数名即可。例如:
定义my_function函数,在屏幕上输出"This is my function"。
function my_function() {
echo "This is my function"
}
my_function
This is my function
定义mcd函数,创建一个文件夹并使用cd进入该文件夹。
mcd () {
mkdir -p "$1"
cd "$1"
}
传递参数与返回值
可以在函数内部使用参数,并使用return语句返回一个值,例如:
传入两个值,计算二者之和,并返回他们的和。
function add(){
local result=$(( $1 + $2 ))
return $result
}
add 1 5
echo $?
6
本例中,local关键字用于声明一个局部变量result,即函数内部的变量,它的作用范围仅限于add函数内部。'$1'和'$2'是函数被调用时传递的参数。'$(( ... ))'是bash中用于进行算术运算的语法,它可以执行数学表达式并返回结果。'$?'返回上一个命令的返回值。
在bash函数中,使用'$#'来获取参数的数量,'$@'表示传递给函数的所有参数列表。例如:
print_args函数接受任意数量的参数,并输出参数的数量与所有参数。
function print_args() {
echo "Number of arguments: $#"
echo "All arguments passed to the function: $@"
}
print_args foo bar baz
Number of arguments: 3
All arguments passed to the function: foo bar baz