1、特殊变量:$n
1.1.语法
$n
1.2.含义
- 1.$n用于接收脚本文件执行时传入的参数
$0
:用于获取当前脚本文件名称的
$1~$9
,:代表获取第1个输入参数到第9个输入参数- 第10个以上的输入参数获取参数的格式:
${数字}
, 否则无法获取
1.3.执行脚本文件传入参数:
sh 脚本文件 输入参数1 输入参数2 ...
1.4.案例演示
a.需求:
- 1.案例需求:创建脚本文件demo4.sh文件, 并在脚本文件内部执行打印脚本文件名字, 第一个输入参数, 第二个输入参数
b.实现:
- 1.创建demo4.sh文件
- 2.编辑demo4.sh文件, 输出脚本文件名称\第一个输入参数\第二个输入参数
- 3.执行demo4.sh文件,输入输出参数itcast itheima的2个输入参数, 观察效果
2、特殊变量:$#
2.1.语法:
$#
2.2.含义:
- 获取所有输入参数的个数
2.3.案例演示:
a.需求:
- 在demo4.sh中输出
输入参数个数
b.演示
- 1.编辑demo4.sh, 输出输入参数个数
- 2.执行demo4.sh传入参数itcast, itheima, 播仔 看效果
3.特殊变量:$*
、$@
3.1.语法
- 1.
$*
与$@
都是获取所有输入参数
, 用于以后输出所有参数
$*
$@
- 2.循环语法
for var in 列表变量
do # 循环开始
命令 # 循环体
done # 循环结束
3.2.区别:
- 不使用双引号括起来,功能一样:
$*
和$@
获取所有输入参数,格式为: $1 $2 … $n- 使用双引号括起来:
"$*"
获取的所有参数拼接为一个字符串, 格式为:"$1 $2 ... $n"
"$@"
获取一组参数列表对象, 格式为:"$1" "$2" ... "$n"
- 使用循环打印所有输入参数可以看出区别
3.3.案例:
a.需求:
- 1.在
demo4.sh
中循环打印输出所有输入参数, - 2.体验
$*
与$@
的区别
b.实现:
- 1.编辑
demo4.sh
文件:
- 2.直接输出所有输入参数, 与循环方式输出所有输入参数(使用双引号包含
$*
与$@
)#!/bin/bash # 命令1: 打印当前脚本文件名字 echo "当前脚本文件名称:$0" # 命令2: 打印第1个输入参数 echo "第一个输入参数:$1" # 命令3: 打印第2个输入参数 echo "第二个输入参数:$2" # 命令4: 打印第10个输入参数 echo "第十个输入参数不带花括号获取:$10" echo "第十个输入参数带花括号获取:${10}" # 命令5 打印所有输入参数的个数 echo "所有输入参数个数:${#}" # 增加命令: 实现直接输出所有输入后参数 echo '使用$*直接输出:'$* echo '使用$@直接输出:'$@ # 增加命令: 使用循环打印输出所有输入参数 echo '循环遍历输出$*所有参数' for item in "$*" do echo $item done echo '循环遍历输出$@所有参数' for item in "$@" do echo $item done
- 运行观察区别
4.特殊变量:$?
4.1.语法
$?
4.2.含义:
- 1.用于
获取上一个Shell命令的退出状态码, 或者是函数的返回值
- 每个Shell命令的执行都有一个返回值, 这个返回值用于说明命令执行是否成功
- 一般来说,
返回0代表命令执行成功
, 非0代表执行失败
4.3.演示:
- 1.输入一个正确命令, 再输出
$?
- 2.输入一个错误命令, 在输出
$?
5.特殊变量:$$
5.1. 语法
$$
5.2.含义
- 用于获取当前Shell环境的进程ID号
5.3.演示
- 1.查看当前Shell环境进程编号:
ps -aux|grep bash
- 2.输出 $$ 显示当前shell环境进程编号
小结常用的特殊符号变量如下
特殊变量 | 含义 |
---|---|
$n | 获取输入参数的$0 , 获取当前Shell脚本文件名字$1~$9 , 获取第一个输入参数到第九个输入参数${10} 获取10和10以上的参数需要使用花括号 |
$# | 获取所有输入参数的个数 |
$* 与 $@ | 获取所有输入参数数据 区别: 如果不使用双引号, 功能一样, 获取所有参数数据为一个字符串, 如果使用了双引号, $@ 获取的就是参数列表对象, 每个参数都是一个独立字符串, |
$? | 获取上一个命令的退出状态码, 一般;来说0代表命令成功, 非0代表执行失败 |
$$ | 获取当前shell环境进程的ID号 |