变量
系统预定义变量
常用系统变量
$HOME、$PWD、$SHELL、$USER等
#(1)查看系统变量的值
[yuhx@master ~]$ echo $HOME
/home/yuhx
#显示当前 Shell 中所有变量:set
[yuhx@master ~]$ set
BASH=/bin/bash
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
自定义变量
1.基本语法
- 定义变量:变量名=变量值,注意,=号前后不能有空格
- 撤销变量:unset 变量名
- 声明静态变量:readonly 变量,注意:不能 unset
2.变量定义规则
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建
议大写。 - 等号两侧不能有空格
- 在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算。
- 变量的值如果有空格,需要使用双引号或单引号括起来
3.案例实操
#定义变量 A
[yuhx@master shells]$ A=5
[yuhx@master shells]$ echo $A
5
#给变量 A 重新赋值
[yuhx@master shells]$ A=8
[yuhx@master shells]$ echo $A
8
#撤销变量 A
[yuhx@master shells]$ unset A
[yuhx@master shells]$ echo $A
#声明静态的变量 B=2,不能 unset
[yuhx@master shells]$ readonly B=8
[yuhx@master shells]$ echo $B
8
[yuhx@master shells]$ B=9
-bash: B: readonly variable
#在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算
[yuhx@master shells]$ C=1+2
[yuhx@master shells]$ echo $C
1+2
#变量的值如果有空格,需要使用双引号或单引号括起来
[yuhx@master shells]$ D=i love shell
[yuhx@master shells]$ echo $D
-bash: world: command not found
[yuhx@master shells]$ D="i love shell"
[yuhx@master shells]$ echo $D
i love shell
#可把变量提升为全局环境变量,可供其他 Shell 程序使用
export 变量名
[yuhx@master shells]$ vim helloworld.sh
#在 helloworld.sh 文件中增加 echo $
#!/bin/bash
echo "helloworld"
echo $B
[yuhx@master shells]$ ./helloworld.sh
Helloworld
[yuhx@master shells]$ export B
[yuhx@master shells]$ ./helloworld.sh
Helloworld
2
特殊变量
$n
-
基本语法
$n (功能描述:n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}) -
案例实操
[yuhx@master shells]$ touch parameter.sh
[yuhx@master shells]$ vim parameter.sh
#!/bin/bash
echo '==========$n=========='
echo $0
echo $1
echo $2
[yuhx@master shells]$ chmod 777 parameter.sh
[yuhx@master shells]$ ./parameter.sh cls xz
==========$n==========
./parameter.sh
cls
xz
$#
-
基本语法
$# (功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性)。 -
案例实操
[yuhx@master shells]$ vim parameter.sh
#!/bin/bash
echo '==========$n=========='
echo $0
echo $1
echo $2
echo '==========$#=========='
echo $#
[yuhx@master shells]$ chmod 777 parameter.sh
[yuhx@master shells]$ ./parameter.sh cls xz
==========$n==========
./parameter.sh
cls
xz
==========$#==========
2
$* 和 $@
-
基本语法
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待 -
案例实操
[yuhx@master shells]$ vim parameter.sh
#!/bin/bash
echo '==========$n=========='
echo $0
echo $1
echo $2
echo '==========$#=========='
echo $#
echo '==========$*=========='
echo $*
echo '==========$@=========='
echo $@
[yuhx@master shells]$ ./parameter.sh a b c d e f g
==========$n==========
./parameter.sh
a
b
==========$#==========
7
==========$*==========
a b c d e f g
==========$@==========
a b c d e f g
$?
-
基本语法
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。) -
案例实操
# 判断 helloworld.sh
[yuhx@master shells]$ ./helloworld.sh
[yuhx@master shells]# echo $?
0