一:系统预定义变量

1.1 常用系统变量

  • $USER、$HOME、$PWD、$SHELL等;
  • 使用 env 查看当前系统变量;
  • 使用 set 显示当前 shell 中所有变量;使用 unset + 变量名 清除该变量;

1.2 案例操作

1
2
3
4
5
6
7
8
[root@hadoop100 shell]# echo $USER
root
[root@hadoop100 shell]# echo $HOME
/root
[root@hadoop100 shell]# echo $SHELL
/bin/bash
[root@hadoop100 shell]# echo $PWD
/root/RupertTears/shell

二:自定义变量

2.1 基本语法

  • 定义变量:变量名=变量值,注意“=”的前后不能有空格;
  • 撤销变量:unset + 变量;
  • 声明静态变量:readonly + 变量,不能 unset;

2.2 变量定义规则

  1. 变量名称可以由字母、数字和下划线组成,但不能以数字开头,环境变量名称建议大写;
  2. 等号两侧不能有空格;
  3. 在 bash 中,变量默认为字符串类型,不能进行数值运算;
  4. 变量值中若有空格,需要使用单引号或者双引号括起来。

2.3 案例实操

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[root@hadoop100 shell]# A=99
[root@hadoop100 shell]# echo $A
99
[root@hadoop100 shell]# A=97
[root@hadoop100 shell]# echo $A
97
[root@hadoop100 shell]# unset A
[root@hadoop100 shell]# echo $A

[root@hadoop100 shell]# readonly B=88
[root@hadoop100 shell]# echo $B
88
[root@hadoop100 shell]# B=66
-bash: B: 只读变量
[root@hadoop100 shell]# unset B
-bash: unset: B: 无法反设定: 只读 variable
[root@hadoop100 shell]# C=1+2
[root@hadoop100 shell]# echo $C
1+2

# 数值运算
[root@hadoop100 shell]# C=$((2+2))
[root@hadoop100 shell]# echo $C
4
[root@hadoop100 shell]# C=$[1+2]
[root@hadoop100 shell]# echo $C
3

# 提升变量作用域
[root@hadoop100 shell]# D="hello ghost"
[root@hadoop100 shell]# echo $D
hello ghost
[root@hadoop100 shell]# export D
[root@hadoop100 shell]# ll
总用量 8
-rwxr-xr-x. 1 root root 31 12月 11 14:56 hello.txt
-rwxr-xr-x. 1 root root 25 12月 11 15:21 test.sh
[root@hadoop100 shell]# vim hello.txt
[root@hadoop100 shell]# sh hello.txt
hello world
hello ghost

三:特殊变量

3.1 $n

  • $n (功能描述:n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,十以 上的参数,十以上的参数需要用大括号包含,如${10})
1
2
3
4
5
6
7
8
9
10
11
12
13
[root@hadoop100 shell]# touch parameter.sh
[root@hadoop100 shell]# vim parameter.sh
[root@hadoop100 shell]# cat parameter.sh
#!/bin/bash
echo '=== $n ==='
echo first parameter:$1
echo second parameter:$2
echo three parameter:$3
[root@hadoop100 shell]# sh parameter.sh abc 123 xyz
=== $n ===
first parameter:abc
second parameter:123
three parameter:xyz

3.2 $#

  • 功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及 加强脚本的健壮性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@hadoop100 shell]# vim parameter.sh 
[root@hadoop100 shell]# cat parameter.sh
#!/bin/bash
echo '=== $n ==='
echo '=== $# ==='
echo parameter num:$#
echo first parameter:$1
echo second parameter:$2
echo three parameter:$3
[root@hadoop100 shell]# sh parameter.sh abc 123 xyz
=== $n ===
=== $# ===
parameter num:3
first parameter:abc
second parameter:123
three parameter:xyz

3.3 $*、$@

  • $* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
  • $@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@hadoop100 shell]# cat parameter.sh 
#!/bin/bash
echo '=== $n ==='
echo '=== $# ==='
echo parameter num:$#
echo first parameter:$1
echo second parameter:$2
echo three parameter:$3
echo '=== $* ==='
echo all parameter:$*
echo '=== $@ ==='
echo all parameter:$@
[root@hadoop100 shell]# sh parameter.sh abc 123 xyz
=== $n ===
=== $# ===
parameter num:3
first parameter:abc
second parameter:123
three parameter:xyz
=== $* ===
all parameter:abc 123 xyz
=== $@ ===
all parameter:abc 123 xyz

3.4 $?

  • 功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一 个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明 上一个命令执行出错。
1
2
3
4
5
6
7
8
9
[root@hadoop100 shell]# pwd
/root/RupertTears/shell
[root@hadoop100 shell]# echo $?
0
[root@hadoop100 shell]# pwdr
bash: pwdr: 未找到命令...
相似命令是: 'pwd'
[root@hadoop100 shell]# echo $?
127