目录结构
一、declare命令
1. 将变量声明为数值型
2. 声明数组变量
3. 声明环境变量
4. 声明变量只读属性
5. 查询变量的属性
二、数值运算的方法
1. 加法
2. 混合运算
三、变量测试
一、declare命令
Shell变量为弱类型,默认为字符串类型;若要参与运算,则需要声明变量类型
declare声明变量类型:
declare [+/-] [选项] 变量名
选项:
- 给变量设定类型属性
+ 给变量取消类型属性
-a 将变量声明为数组型
-i 将变量声明为整型(integer)
-x 将变量声明为环境变量
-r 将变量声明为只读变量
-p 显示指定变量的被声明类型
1. 将变量声明为数值型
# 给变量x、y赋值
x=11 y=22
# 声明变量z的类型为整型,其值为x与y的之和
declare -i z=$x+$y
# 输出变量z的值
echo $z
PS:以上不需要单独声明变量x、y的类型,其参与运算之后会转换为最终的运算值所设定的类型(如:整型)

2. 声明数组变量
一个变量里保存多个值,每个值对应有不同的下标进行识别
# 定义数组
stu[0]=Jack stu[1]=Caddy
declare -a stu[2]=Sunny
# 查看数组
echo ${stu} # 调用第1个变量的值,下标=0,即stu[0]
echo ${stu[2]}
echo ${stu[*]} # 调用数组变量中所有的值

3. 声明环境变量
# 方式1:
declare -x 变量名=变量值
# 方式2:
export 变量名=变量值
PS:以上方式1和方式2的作用相似,但实质都是调用declare命令

4. 声明变量只读属性
# 给变量赋予只读属性
declare -r 变量名
PS:只读属性,会让变量不能修改、不能删除,甚至不能取消只读属性(不建议对系统启动相关的程序作此操作)
5. 查询变量的属性
# 查询所有变量的属性
declare -p
# 查询指定变量的属性
declare -p 变量名
二、数值运算的方法
运算符
优先级 | 运算符 | 说明 |
---|---|---|
13 | -、+ | 単目负、単目正 |
12 | !、~ | 逻辑非、按位取反or补码 |
11 | *、/、% | 乘、除、取模 |
10 | +、- | 加、减 |
9 | <<、>> | 按位左移、按位右移 |
8 | <=、>=、<、> | 小于等于、大于等于 |
7 | ==、!= | 等于、不等于 |
6 | & | 按位与 |
5 | ^ | 按位异或 |
4 | | | 按位或 |
3 | && | 逻辑与 |
2 | || | 逻辑或 |
1 | =、+=、*=、%=、&=、 ^=、|=、<<=、>>= |
赋值、运算且赋值 |
1. 加法
方法1:
# 给变量x、y赋值
x=11 y=22
# 声明变量z的类型为整型,其值为x与y的之和
declare -i z=$x+$y
# 输出变量z的值
echo $z
方法2:
x=11 y=22
# 以下"+"左右两侧必须有空格,否则会被当做字符串处理
z=$(expr $x + $y)
echo $z
方法3:
x=11 y=22
z1=$(($x+$y))
z2=$[$x+$y]
echo $z1 $z2
2. 混合运算
# 加减乘除联合运算
x=$(((1+6)*7/3-2))
# 取模运算
y=$((22/7))
# 逻辑与运算
z=$((1 && 0))
echo $x $y $z

三、变量测试
变量测试在脚本优化时使用
变量置换方式 | y未设置 | y为空值 | y设置值 |
---|---|---|---|
x=${y-新值} |
x=新值 | x为空 | x=$y |
x=${y:-新值} |
x=新值 | x=新值 | x=$y |
x=${y+新值} |
x为空 | x=新值 | x=新值 |
x=${y:+新值} |
x为空 | x为空 | x=新值 |
x=${y=新值} |
x=新值 y=新值 |
x为空 y值不变 |
x=$y y值不变 |
x=${y:=新值} |
x=新值 y=新值 |
x=新值 y=新值 |
x=$y y值不变 |
x=${y?新值} |
新值输出到 标准错误输出 |
x为空 | x=$y |
x=${y:?新值} |
新值输出到 标准错误输出 |
新值输出到 标准错误输出 |
x=$y |
【案例1】x=${y-新值}
# 删除变量y
unset y
# 进行测试
x=${y-2}
echo $x
变量y不存在,则x=新值

# 删除变量y
y=""
# 进行测试
x=${y-2}
echo $x
y为空值,则x为空;y设置值,则x=$y

【案例2】x=${y:?新值}
unset y
x=${y:?3}
y=""
x=${y:?3}
y=2
x=${y:?3}
echo $x

网友评论