元字符
元字符值得是能够被shell解释的特殊字符,每个特殊字符都有其特殊含义,这些字符一方面可用于变量值的运算、我们可以称之为运算符,另外一方面可以和shell命令配合使用来达到更高级的效果
一、算数运算符
1.1、运算符
+ 加运算 $((a+b))
- 减运算 $((a-b))
* 乘运算 $((a*b))
/ 除运算 $((a/b))
% 取余 $((a%2))
1.2、运算参数
1.2.1、bc运算
# 支持浮点运算 bc
格式: "echo $abc | bc"
"echo ‘scale=2;$abc‘ | bc"
1.2.2、expr运算
# expr 不支持浮点运算,注意数字与数字之间的空格
res=`expr 5 / 3`
如果是乘法,需要 \* 转义
expr 3 \* 10 30
$[]
let
1.2.3、$(())运算
$(()) 不支持浮点运算
echo $((1+1))
echo $((a+b))
支持嵌套括号
echo $(((5-3)*2))
1.2.4、let运算
# let 不支持浮点运算,也不支持直接输出,只能赋值。
let res=1+1 echo $res 2
let num=$a+$b echo $num 3
练习题
1.编写脚本,实现计算器功能
2.编写判断输入的参数是否是整数
3.编写脚本计算1-100相加的值
二、测试运算符
2.1、测试符号
1. [ ] 括号内左右两侧必须要有空格
2.test 与[]效果一样,参数也一样
2.2、测试文件状态
-d 目录
1.[ -d /etc/ ] echo $? 0
2.test -d /etc/ echo $? 0
-
s 文件长度 > , 非空
1.[ -s 1.txt ] echo $? 非空0.空为1
2.test -s 1.txt echo $? 非空0,空为1
-f 标准文件
1.[ -f 2.txt ] echo $? 0
2.test -f 2.txt echo $? 0
-w 可写
1.[ -w 3.txt ] echo $? 0
2.test -w 3.txt echo $? 0
-r 可写
1.[ -r 4.txt ] echo $? 0
2.test -r 4.txt echo $? 0
-x 可执行
1.[ -x 5.txt ] echo $? 0
2.test -x 5.txt echo $? 0
-L 符号链接
1.[ -L 6.txt ] echo $? 0
2.test -L 6.txt echo $? 0
-u 文件有 suid位设置
1.[ -u 7.txt ] echo $? 0
2.test -u 7.txt echo $? 0
2.3、字符串测试
== 与 != 两个字符串相等与不相等
[ "aaa" == "aaa" ] echo $? 0
判断字符串是否相等
[ "aaa" != "bbb" ] echo $? 0
判断字符串是否不相等
-z 与 -n 判断字符串空与非空
[ -z "$a" ] 判断字符串是否为空
[ -n "$a" ] 判断字符串是否非空
2.4、测试数值
-eq #等于
-gt #大于
-ge #大于或等于
-lt #小于
-le #小于或等于
-ne #不等于
-a #并且
-o #或者
三、关系运算符
需要配合(()),使用(())属于C语言风格的比较,最终都是都是用来当if判断或者whole循环的条件
# <
# >
# <=
# >=
# ==
# !=
# &&
# ||
四、赋值运算符
# =
x=10 echo $x 10
# += %=
x=10 ((x%3)) echo $x 10 #未赋值给x
x=10 ((x%=3)) echo $x 1 #计算完后赋值给x
# *=
x=10 ((x*=3)) echo $x 30
# /=
x=10 ((x/=3)) echo $x 3
五、补充
# [] 、[[]] 基本一样,不同的是,[[]]支持正则匹配,必须注意,括号两边都要有空格
[[ $x == $y ]] echo $? 1
支持正则表达,不要加""
[[ $x =~ ^root ]] echo $? 1
[[ $x =~ ^[0-9]+ ]]
如果是多个的话,可以在后面增加 +
企业面试题:
1、传入两个数值信息,自动让脚本显示数值比较情况
[ $# -ne 2 ] && echo "只能传入两个整数" && exit
[[ ! $1 =~ ^[0-9]+$ ]] && echo "请传入整数"
[[ ! $2 =~ ^[0-9]+$ ]] && echo "请传入整数"
[[ $1 -gt $2 ]] && echo "$1 > $2"
[[ $1 -lt $2 ]] && echo "$1 < $2"
[[ $1 -eq $2 ]] && echo "$1 = $2"
2、浮点数的比较
# 浮点数用bc进行比较,bc结果1代表为真,0代表假
echo "1.3 >= 10.8" | bc 输出结果 0 为假
echo "5.4 >= 2.3" | bc 输出结果 1 为真