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