1. 系统变量
(1)常用系统变量
$HOME、$PWD、$SHELL、$USER等
(2)案例实操
1)查看系统变量的值
[root@localhost local]# echo $HOME
/root
[root@localhost local]# echo $PWD
/usr/local
[root@localhost local]# echo $SHELL
/bin/bash
[root@localhost local]# echo $USER
root
2)显示当前 Shell 中所有变量:set
[root@localhost ~]# set
# 内容太多就不展示命令执行后的结果了
2. 自定义变量
(1)基本语法
- 定义变量:变量=值
- 撤销变量:unset 变量
- 声明静态变量:readonly 变量,注意:不能 unset
(2)变量定义规则
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
- 等号两侧不能有空格
- 在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
- 变量的值如果有空格,需要使用双引号或单引号括起来。
(3)案例实操
1)定义变量A
[root@localhost ~]# A=1
[root@localhost ~]# echo $A
1
2)给变量A重新赋值
[root@localhost ~]# A=5
[root@localhost ~]# echo $A
5
3)撤销变量A
[root@localhost ~]# unset A
[root@localhost ~]# echo $A
[root@localhost ~]#
4)声明静态的变量B
[root@localhost ~]# readonly B=2
[root@localhost ~]# echo $B
2
[root@localhost ~]# unset B
-bash: unset: B: cannot unset: readonly variable
5)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
[root@localhost ~]# C=3+4
[root@localhost ~]# echo $C
3+4
6)变量的值如果有空格,需要使用双引号或单引号括起来
[root@localhost ~]# D=I love abes
-bash: love: command not found
[root@localhost ~]# D="I love abes"
[root@localhost ~]# echo $D
I love abes
7)可把变量提升为全局环境变量,可供其他Shell程序使用
export 变量名
[root@localhost ~]# vim hellshell.sh
输入以下内容:
#!/bin/bash
echo "helloworld"
echo $B
[root@localhost ~]# chmod 777 hellshell.sh
[root@localhost ~]# ./hellshell.sh
helloshell
[root@localhost ~]#
# 发现没有打印变量B的值
# 把变量B提升为全局环境变量
[root@localhost ~]# export B
# 再次执行hellshell.sh脚本
[root@localhost ~]# ./hellshell.sh
helloshell
2
# 发现打印出来了
3. 特殊变量
3.1 $n
- 基本语法
$n(功能描述:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
- 案例实操
输出该脚本文件名称、输入参数1和输入参数2 的值
[root@localhost ~]# vim parameter.sh
#!/bin/bash
echo "$0 $1 $2"
[root@localhost ~]# chmod 777 parameter.sh
[root@localhost ~]# ./parameter.sh 123 abes
./parameter.sh 123 abes
3.2 $
- 基本语法
$#(功能描述:获取所有输入参数个数,常用于循环)。
echo “$0 $1 $2” echo $#
[root@localhost ~]# ./parameter.sh abes abes ./parameter.sh abes abes 2
<a name="vASrY"></a>
## 3.3 $*,$@
1. 基本语法
$* (功能描述:这个变量代表命令行中的所有参数,$*把所有的参数看成一个整体)<br />$@ (功能描述:这个变量代表命令行中的所有参数,不过$@把每个参数区分对待)
2. 案例实操
打印所有的参数
```shell
[root@localhost ~]# vim parameter.sh
#!/bin/bash
echo "$0 $1 $2"
echo $#
echo $*
echo $@
[root@localhost ~]# sh parameter.sh 123 abes 4 5 6
parameter.sh 123 abes
5
123 abes 4 5 6
123 abes 4 5 6
3.4 $?
- 基本语法
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体哪一个数,由命令自己来决定),则证明上一个命令执行不正确)
- 案例实操
判断 parameter.sh 脚本是否正确执行
[root@localhost ~]# sh parameter.sh 123 abes 4 5 6
parameter.sh 123 abes
5
123 abes 4 5 6
123 abes 4 5 6
[root@localhost ~]# echo $?
0