1.数值运算
(1)declare声明变量类型
[root@localhost ~]# declare [+/-][选项] 变量名
选项:
-: 给变量设定类型属性
+: 取消变量的类型属性
-i: 将变量声明为整数型(integer)
-x: 将变量声明为环境变量
-p: 显示指定变量的被声明的类型
[cfp@bogon ~]$ aa=11
[cfp@bogon ~]$ bb=22
[cfp@bogon ~]$ declare -p aa
declare -- aa="11"
[cfp@bogon ~]$ export aa
[cfp@bogon ~]$ declare -p aa
declare -x aa="11"
[cfp@bogon ~]$ aa=11
[cfp@bogon ~]$ bb=22
[cfp@bogon ~]$ cc=$aa+$bb
[cfp@bogon ~]$ echo $cc
11+22
那么,如何进行数值运算呢?也就是说计算“1+1=2”呢?
方法一:
[cfp@bogon ~]$ aa=11
[cfp@bogon ~]$ bb=22
[cfp@bogon ~]$ declare -i cc=$aa+$bb
[cfp@bogon ~]$ echo $cc
33
方法二:expr或let数值运算工具
[cfp@bogon ~]$ aa=11
[cfp@bogon ~]$ bb=22
[cfp@bogon ~]$ dd=$(expr $aa + $bb)
#dd 的值是 aa 和 bb 的和。注意“ + ”号左右两 侧必须有空格
[cfp@bogon ~]$ echo $dd
33
方法三:“$((运算式))”或“$[运算式]” 。这种方法在Linux中最常见。
[cfp@bogon ~]$ aa=11
[cfp@bogon ~]$ bb=22
[cfp@bogon ~]$ ff=$(($aa+$bb))
[cfp@bogon ~]$ echo $ff
33
[cfp@bogon ~]$ gg=$[$aa+$bb]
[cfp@bogon ~]$ echo $gg
33
2. 运算符
优先级 | 运算符 | 说明 |
---|---|---|
13 | -,+ | 单目负、单目正 |
12 | !,~ | 逻辑非、按位取反或补码 |
11 | *,/,% | 乘、除、取模 |
10 | +,- | 加、减 |
9 | <<,>> | 按位左移、按位右移 |
8 | <=,>=,<,> | 小于或等于、大于或等于、小于、大于 |
7 | ==,!= | 等于、不等于 |
6 | & | 按位与 |
5 | ^ | 按位异或 |
4 | | | 按位或 |
3 | && | 逻辑与 |
2 | || | 逻辑或 |
1 | =,+=,=,*=,/=,%=,&=, ^=, |=, <<=, >>= | 赋值、运算且赋值 |
[cfp@bogon ~]$ a=$(((7+8)*6/3))
[cfp@bogon ~]$ echo $a
30
[cfp@bogon ~]$ bb=$((14%3))
[cfp@bogon ~]$ echo $bb
2
[cfp@bogon ~]$ cc=$((1 && 0))
[cfp@bogon ~]$ echo $cc
0
3.变量测试与内容替换
变量置换方式 | 变量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 |
[cfp@bogon ~]$ unset y
# 删除变量 y
[cfp@bogon ~]$ x=${y-new}
# 进行测试
[cfp@bogon ~]$ echo $x
new
# 因为变量 y 不存在,所以 x=new
[cfp@bogon ~]$ y=old
# 给变量 y 赋值
[cfp@bogon ~]$ x=${y-new}
# 进行测试
[cfp@bogon ~]$ echo $x
old