研究学习 Linux Shell 的系列文章.
这篇文章主要讲 Shell 运算符.
1. declare 命令
Shell 变量
- 弱类型
- 默认字符串类型
declare
命令声明变量类型
declare [+/-] [选项] 变量名
- - :给变量设定类型属性
- + :取消变量的类型属性
- -a :将变量声明为数组型
- -i :将变量声明为整数型(integer)
- -x:将变量声明为环境变量
- -r:将变量声明为只读变量
- -p:显示指定变量的被声明的类型
declare -i
声明整型变量
[root@cloudvm ~]# aa=11
[root@cloudvm ~]# bb=22
[root@cloudvm ~]# cc=$aa+$bb
[root@cloudvm ~]# echo $cc
11+22
[root@cloudvm ~]# declare -i cc=$aa+$bb
[root@cloudvm ~]# echo $cc
33
declare -a
声明数组变量
[root@cloudvm ~]# movie[0]=zp
[root@cloudvm ~]# movie[1]=tp
[root@cloudvm ~]# declare -a movie[2]=live
[root@cloudvm ~]# echo ${movie} # 调用下标首位的变量
zp
[root@cloudvm ~]# echo ${movie[2]}
live
[root@cloudvm ~]# echo ${movie[*]}
zp tp live
declare -x
声明环境变量,与 export 作用相似,但其实是 declare 命令的作用
[root@cloudvm ~]# declare -x test=123
declare -r
声明变量只读属性. 请注意只读属性会让变量不能修改不能删除,甚至不能取消只读属性.
[root@cloudvm ~]# declare -r test
[root@cloudvm ~]# declare -p test
declare -rx test="123"
[root@cloudvm ~]# test=456
-bash: test: readonly variable
[root@cloudvm ~]# unset test
-bash: unset: test: cannot unset: readonly variable
[root@cloudvm ~]# declare +r test
-bash: declare: test: readonly variable
declare -p
查看变量属性和类型
查看单个变量
[root@cloudvm ~]# declare -p test
declare -x test="123"
查看全部变量
[root@cloudvm ~]# declare -p
declare -- ABRT_DEBUG_LOG="/dev/null"
declare -- BASH="/bin/bash"
declare -r BASHOPTS="checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath"
declare -ir BASHPID
declare -A BASH_ALIASES='()'
declare -a BASH_ARGC='()'
...
...
declare -- colors="/root/.dircolors"
declare -x test="123"
2. 数值运算方法
方法 1. declare -i
[root@cloudvm ~]# aa=11
[root@cloudvm ~]# bb=22
[root@cloudvm ~]# declare -i cc=$aa+$bb
[root@cloudvm ~]# echo $cc
33
方法 2. expr
或 let
数值运算工具
[root@cloudvm ~]# aa=11
[root@cloudvm ~]# bb=22
[root@cloudvm ~]# dd=$(expr $aa + $bb) # 注意 “+” 号左右两侧必须有空格
[root@cloudvm ~]# echo $dd
33
[root@cloudvm ~]# dd=$(expr $aa+$bb)
[root@cloudvm ~]# echo $dd
11+22
方法 3. $((运算式))
或 $[运算式]
[root@cloudvm ~]# aa=11
[root@cloudvm ~]# bb=22
[root@cloudvm ~]# ee=$(($aa+$bb))
[root@cloudvm ~]# echo $ee
33
$(命令)
表示将命令输出作为变量值[root@cloudvm ~]# ff=$(ls) [root@cloudvm ~]# echo $ff anaconda-ks.cfg
运算符
优先级 | 运算符 | 说明 |
---|---|---|
13 | -,+ | 单目负、单目正 |
12 | !,~ | 逻辑非、按位取反或补码 |
11 | *,/,% | 乘、除、取模 |
10 | +,- | 加、减 |
9 | <<,>> | 按位左移、按位右移 |
8 | <=,>=,<,> | 小于或等于、大于或等于,小于、大于 |
7 | ==,!= | 等于、不等于 |
6 | & | 按位与 |
5 | ^ | 按位异或 |
4 | | | 按位或 |
3 | && | 逻辑与 |
2 | || | 逻辑或 |
1 | =,+=,-=,*=,/=,%=,&=,^=,|=,<<=,>>= | 赋值、运算且复制 |
3. 变量测试
格式复杂多样,语法简单
变量置换方式 | 变量y没有设置 | 变量y为空值 | 变量y设置值 |
---|---|---|---|
x=${y-新值} | x=新值 | x为空 | x=$y |
x=${y:-新值} | x=新值 | x=新值 | x=$y |
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 |
变量测试在脚本优化时使用