xie-wen-hui
船帆虽小,却也能远航!

Shell编程之变量(二)

一、变量的分类:

1、本地变量

# 本地变量: 当前用户自定义的变量,在当前的进行的进程中有效,退出后、其他进程及当前进程中的子进程无效!
	
#代码演示:
root@localhost home]# S=123
[root@localhost home]# echo $s

[root@localhost home]# echo $S
123
[root@localhost home]# su boy
[boy@localhost home]$ echo $S

[boy@localhost home]$ 

2、环境变量

# 环境变量:
	1、对当前进程及当前的子进程有效
	
	2、可用env命令查看当前环境变量
	
	3、set查询当前用户的所有变量(临时变量和环境变量)
	
	4、export 变量名=变量值 或 变量名=变量值 + export 变量名

# 代码演示省略,之前写过

3、全局变量

# 全局变量:
	作用:所有用户和程序都能进行调用,继承、新建用户也默认继承												能调用
# 常见的全局变量的配置文件有:

	$HOME/.bashrc			# 当前用户的bash信息,在用户登陆时读取
	$HOME/.bash_profile		# 当前用户的环境变量信息,在用户登陆时读取
	$HOME/.bash_logout		# 当前用户退出当前shell时最后读取
	/etc/bashrc				#全局的bash信息,所有用户生效
	/etc/profile			# 全局环境变量信息,系统和所有用户生效

4、系统变量

# 系统内置变量:
	
	$? : 判断上条命令执行结果,如果返回0则表示上条命令执行成功了,如果是非0则表示失败!
	$# : 一个脚本中所要传的参数的个数
	$* : 一个脚本中所要传的所有参数, 多个参数以一个整体输入,以空格隔开
	$@ :  一个脚本中所要传的所有参数,
	$1-$9 : 脚本中的位置参数!$1代表脚本的第一个参数,以此类推,超过10后用${10}${11}...
	
	$$ : 查看当前进程的进程号
	
	$0 : 当前执行脚本的脚本名称
	${10}-${n} : 超过10位以上脚本的位置参数,
	$! : 当前终端后台运行的最后一个进程号
	!$ : 调用当前前一条命令中的参数
	

二、四则运算

1、运算符

# 方式一、 $(( n1 运算符 n2 ))				 
# 代码演示:

[boy@localhost ~]$ echo $((8*3))
24
[boy@localhost ~]$ echo $((8+3))
11
[boy@localhost ~]$ echo $((8/3))
2
[boy@localhost ~]$ echo $((8%3))
2
[boy@localhost ~]$ echo $((8**3))
512
[boy@localhost ~]$ echo $((8**3))

# 方式二、$[n1 运算符 n2 ]
# 代码演示:

[boy@localhost ~]$ echo $2*4[]
*4[]
[boy@localhost ~]$ echo $[2*4]
8
[boy@localhost ~]$ echo $[2**4]
16
[boy@localhost ~]$ echo $[2-4]
-2
[boy@localhost ~]$ echo $[2+4]
6
[boy@localhost ~]$ echo $[2%4]
2
[boy@localhost ~]$ echo $[2/4]
0
[boy@localhost ~]$ 

# 方式三、expr n1 运算符 n2  
# 1. 注意数字符号之间使用空格隔开
  2. 使用*运算时,要进行\转义
  
# 代码演示:	

[boy@localhost ~]$ expr 2 * 5
expr: 语法错误
[boy@localhost ~]$ expr 2 \* 5
10
[boy@localhost ~]$ expr 2 + 5
7
[boy@localhost ~]$ expr 2 - 5
-3
[boy@localhost ~]$ expr 2 / 5
0
[boy@localhost ~]$ expr 2 ** 5
expr: 语法错误
[boy@localhost ~]$ expr 2 \** 5
expr: 语法错误

# 方式四、let
# 注意:let 前面要先定义变量

# 代码演示:
[boy@localhost ~]$ n1=2;let n1-=2;echo $n1
0
[boy@localhost ~]$ 
运算符总结:
1. 适合快速直接使用数字计算:  $(())、$[]、expr
	expr注意字符数字要空格隔开
	
2. expr不支持幂**运算
3. 适合自动叠加计算: let 
思考: i++ 和 ++i有什么不同
# 区别:
1. 对该变量值的影响

[boy@localhost ~]$ q=2;let q++;echo $q
3
[boy@localhost ~]$ w=2;let ++w;echo $w
3

2. 对表达式的影响

[boy@localhost ~]$ unset q w s
[boy@localhost ~]$ q=3;let x=++q; echo $x		# 先计算,再赋值
4
[boy@localhost ~]$ w=3;let y=w++; echo $y 		# 先赋值,在计算
3
[boy@localhost ~]$ 


# 结论:
	1. 当++i和i++不进行新的变量赋值时,其运算结果是相同的
	2. 当x=++i进行新的变量赋值(表达式运算)时, 是先计算3+1再赋值给x
    3. 当x=i++进行新的变量赋值(表达式运算)时, 是先赋值3=x,再计算
posted on 2021-01-17 14:15  xie-wen-hui  阅读(86)  评论(0)    收藏  举报