元字符--------------腊月闻山鸟,寒崖见蛰熊。

元字符

元字符值得是能够被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 为真

元字符--------------腊月闻山鸟,寒崖见蛰熊。

上一篇:EF的双表联查、分页、添加


下一篇:Qt Model/view 小实例 文件目录浏览器