变量 | 含义 |
---|---|
$0 | 当前脚本的文件名。 |
$n(n≥1) | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是 $2。 |
$# | 传递给脚本或函数的参数个数。 |
$* | 传递给脚本或函数的所有参数。 |
$@ | 传递给脚本或函数的所有参数。当被双引号" " 包含时,$@ 表示所有值的集合(多个), $* 表示所有值拼接以后的结果(一个) |
$? | 上个命令的退出状态,或函数的返回值。 |
$$ | 当前 Shell 进程 ID。对于 Shell脚本,就是这些脚本所在的进程 ID。 |
位置参数
脚本文件传入位置参数
- 创建demo.sh脚本文件
#!/bin/bash
echo "name: ${1}"
echo "age: ${2}"
- 执行test.sh并传入参数
[root@centos shell]# ./demo.sh zhangshan 21
name:zhangshan
age:21
[root@centos shell]#
直接创建函数并传入位置参数
- 创建fun1函数
[root@centos shell]# function fun1(){
> name=${1}
> age=${2}
> }
[root@centos shell]#
- 调用函数并传入参数
注意:如果对应位置的参数没有穿的话就为空;
[root@centos shell]# fun1 zhangshan 21
name=zhangshan
age=21
[root@centos shell]#
特殊变量
脚本文件使用特殊变量(函数同理)
- 创建demo.sh脚本文件
#!/bin/bash
echo "第一个参数:${1}"
echo "第二个参数:${2}"
echo "参数个数:$#"
echo "所有参数:$*"
echo "所有参数(@符):$@"
echo "shell脚本名称:$0"
echo "shell脚本进程ID:$$"
- 调用shell脚本文件
[root@centos shell]# ./demo.sh zhangshan 21
第一个参数:zhangshan
第二个参数:21
参数个数:2
所有参数:zhangshan 21
所有参数(@符):zhangshan 21
shell脚本名称:./demo.sh
shell脚本进程ID:7674
- $*和$@的区别
首先都表示传递给函数或脚本的所有参数。
不同的是当$@被双引号包围时,$@相当于参数集合,$*则还是所有参数拼接成一个值
使用for循环可以直观的看出来
- 编写shell脚本(函数同理)
#!/bin/bash
echo "echo打印\"\$\*\":"${*}""
echo "循环\"\$\*\""
for param in "$*"
do
echo $param
done
echo "echo打印\"\$\@\":"${@}""
echo "循环\"\$\@\""
for param in "$@"
do
echo $param
done
- 结果
[root@centos shell]# sh demo.sh 第一个 第二个 第三个
echo打印"$\*":第一个 第二个 第三个
循环"$\*"
第一个 第二个 第三个
echo打印"$\@":第一个 第二个 第三个
循环"$\@"
第一个
第二个
第三个
从运行结果可以发现,对于"$*"
,只循环了 1 次,因为它只有 1 分数据;对于"$@"
,循环了 3 次,因为它有 3 份数据。
获得方法返回值
- 编写shell脚本
#!/bin/bash
function add(){
return `expr ${1} + ${2}`
}
add ${1} ${2}
echo $?
- 结果
[root@centos shell]# ./demo.sh 1 2
3
[root@centos shell]# ./demo.sh 22 33
55
[root@centos shell]#
输入1和2放回3,输入22和33返回55,获取成功