shell编程(一)


变量基础知识

变量根据作用域可以划分为三种:

  • 本地变量:仅当前shell有效(即当前bash进程)。
  • 环境变量:当前shell及其子shell(即当前bash进程即其子bash进程)。
  • 局部变量:在某部分代码片段中有效(例如函数)。

除了上述三种,还有位置参数变量和特殊变量:

  • 位置参数变量:用于传参给shell脚本或者函数的变量,例如${1}、${2}等。
  • 特殊变量:在shell中具有特殊含义的变量,例如$?、$-等。

本地变量

name=wrz

echo $name

set于unset

查看变量

set | grep "^name"

取消变量

unset name

为什么说是本地变量?

举例说明

查看一下进程id变化

我们原本在PID为2035的shell(bash进程)中,在当前shell设置了变量name并且可获取其值,随后使用bash命令进入了子shell(PID为2148的bash进程)中再获取这个变量,就获取不到了。

如果我们使用exit命令退回刚才的父shell,就又可以获取到该值。

结论

本地变量的生命周期,从创建的时候开始,直到所在的bash进程结束(比如使用exit)或者变量被unset。

环境变量

export age=22

不论在哪个bash进程 都可以获取到的

多命令执行

;    分号,命令按顺序执行,执行完第一个再执行第二个,后一个命令的执行与否与前一个命令的执行成功与否无关。

&& 逻辑与,只有当COMMAND1执行成功的时候,才执行COMMAND2。

||     逻辑或,只有当COMMAND1执行失败的时候,才执行COMMAND2。

算数运算

1    内置命令let

let arg [arg ...]

[root@docker135 ~]# num1=22
[root@docker135 ~]# num2=33
[root@docker135 ~]# let sum=$num1+$num2
[root@docker135 ~]# echo $sum
55
[root@docker135 ~]# 

2    Bash算术展开

$(( ARITHMETIC EXPRESSION ))

[root@docker135 ~]# sum1=$(($num1+$num2))
[root@docker135 ~]# echo $sum1
55
[root@docker135 ~]# 

3    外部命令expr

[root@docker135 ~]# sum3=$(expr $num1 + $num2)
[root@docker135 ~]# echo $sum3
55
[root@docker135 ~]# 

通常使用第二种来运算