变量:
本地变量 只在本shell进程生效
name = "xxx"
name = "$xxx"
name = `xxx`
name = $(xxx)
全局变量 在本进程及子进程中生效
export name = xxx
declare -x name = xxx
局部变量 局部生效,一般值函数
位置变量 $1,$2,$*,$@,$#,$$,$?,$0
$1,$2 脚本后的第1个、第2个……参数
$* 传递给脚本的所有参数,参数是一个整体
$@ 传递给脚本的所有参数,参数是单个独立个体
$$ 当前进程ID
$? 上一条命令的状态,如果脚本没有指明exit码,默认就是最后一条命令的执行状态。0表示正常,非0表示异常
$0 脚本本身
退出码 exit [n]
可以自定义退出状态
算术运算:
+, -, *, /, %(取模,即余数), **(乘方)
实现算术运算的方式
let var = 算术表达式
var = $[算术表达式]
var = $((算术表达式))
赋值:
+=, -=, *=, /=, %=
var++
var+=3
var--
var-=3
逻辑运算:
与,或,非
&&, ||, !
1 && 0 = 0 1 || 0 = 1
1 && 1 = 1 1 || 1 = 1
0 && 0 = 0 0 || 1 = 1
0 && 1 = 0 0 || 0 = 0
!0 = 1
!1= 0
短路与
a && b 1)a为真,b必须参与运算; 2)a为假,则结果为假
短路或
a || b 1)a为真,则结果为真; 2)a为假,则b必须参与运算
异或
异或的两个值,相同为假,不同为真
条件测试
test 表达式
[ 表达式 ]
[[ 表达式 ]]
若真返回0,若假返回1
“表达式”前后各有一个空格
数值比较:
-gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-lt 是否小于
-le 是否小于等于
字符串比较:
==
> ascii码比较
<
!=
=~ 左侧的字符串是否能被右侧的正则匹配
-z “string” 字符串是否为空
-n “string” 字符串是否不为空
文件测试:
-a, -e 文件是否存在
-b 文件是否为块设备
-c 文件是否为字符设备
-d 文件是否为目录
-f 文件是否为普通文件
-h 文件是否为链接文件
-r 文件是否可读
-w 文件是否可写
-x 文件是否可执行
-u 是否suid
-g 是否sgid
-k 是否sticky
-s 存在且非空
具体文件测试,可参考 man test
read接受输入
read将输入传递给一个或多个shell变量
read -p 提示输入信息
read -s 静默输入
read -n 输入的字符长度