一、shell参数传递
运行 Shell 脚本文件时我们可以给它传递一些参数,这些参数在脚本文件内部可以使用$n的形式来接收,例如,$1 表示第一个参数,$2 表示第二个参数,依次类推。
#!/bin/bash
echo "参数1 = $1"
echo "参数2 = $2"
xhh@cluo:~/study/shell$ ./shell-5.sh abcd 12346
参数1 = abcd
参数2 = 12346
二、shell中的特殊变量
变量 | 含义 |
---|---|
$0 | 当前脚本的文件名 |
$n(n≥1) | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是 $2。 |
$# | 传递给脚本或函数的参数个数。 |
$* | 传递给脚本或函数的所有参数。 |
$@ | 传递给脚本或函数的所有参数。当被双引号" "包含时,$@ 与 $* 稍有不同,我们将在《Shell ∗ 和 *和 ∗和@的区别》一节中详细讲解。 |
$? | 上个命令的退出状态,或函数的返回值,我们将在《Shell $?》一节中详细讲解。 |
$$ | 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID |
#!/bin/bash
echo "Process ID: $$"
echo "File Name: $0"
echo "First Parameter : $1"
echo "Second Parameter : $2"
echo "All parameters 1: $@"
echo "All parameters 2: $*"
echo "Total: $#"
xhh@cluo:~/study/shell$ ./shell-6.sh adcd 12346
Process ID: 52421
File Name: ./shell-6.sh
First Parameter : adcd
Second Parameter : 12346
All parameters 1: adcd 12346
All parameters 2: adcd 12346
Total: 2
三、shell中的函数
linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。
#!/bin/bash
add(){
echo "输入第一个数字: "
read a
echo "输入第二个数字: "
read b
echo "两个数字分别为 $a 和 $b !"
return $(($a+$b))
}
add
echo "输入的两个数字之和为 $? !"
这里需要注意的是
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
$? 仅对其上一条指令负责,一旦函数返回后其返回值没有立即保存入参数,那么其返回值将不再能通过 $? 获得。
比如
#!/bin/bash
function demoFun1(){
echo "这是我的第一个 shell 函数!"
return `expr 1 + 1`
}
demoFun1
echo $?
echo $?
执行结果
这是我的第一个 shell 函数!
2
0
可以看到第二个 $? 并没有正确的返回出函数的执行结果,而是返回的一个0.证明函数没有错误。
四、shell函数中的参数
#!/bin/bash
add(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
add 1 2 3 4 5 6 7 8 9 34 73
打印结果
注意,
10
不能获取第十个参数,获取第十个参数需要
10 不能获取第十个参数,获取第十个参数需要
10不能获取第十个参数,获取第十个参数需要{10}。当n>=10时,需要使用${n}来获取参数。
如果使用 $10来表示 会识别为 $1 + 字符 0 所以这里显示为 10
比如我这里修改下顺序
#!/bin/bash
add(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $21 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
add 1 3 2 5 4 6 7 8 9 34 73