退出状态

$?记录了上一个命令的退出状态:

0 运行成功

1~125 运行失败

126 找到命令但无法执行

127 未找到要运行的命令

>128 命令被系统强制结束

测试

两种方式:

test expression

[ expression ]

注意[]的两边必须要空格

比较条件为真返回0,假返回非0(C语言为真返回非0正整数,假返回0)

算数比较运算符

n1 -eq n2 等于返回0,不等于返回1

n1 -gt n2

n1 -ge n2

n1 -le n2

n1 -lt n2

n1 -ne n2 不等于返回0,等于返回1

例:

[root@localhost tmp]# n1=15

[root@localhost tmp]# [ "$n1" -eq 15 ]

[root@localhost tmp]# echo $?

0

[root@localhost tmp]# test "$n1" -eq 15

[root@localhost tmp]# echo $?

0

[root@localhost tmp]# [ $n1 -ne 15 ]

[root@localhost tmp]# echo $?

1

[root@localhost tmp]# test $n1 -ne 15

[root@localhost tmp]# echo $?

1

注意:只能比较整数,不能比较浮点数

字符串运算符

方式1:(只能用test运算符)

-n string 测试字符串string是否不为空(不为空是真,值为0,为空值为1),-n为默认,可省略

-z string 测试字符串string是否为空(为空是真,值为0,不为空值为1)

方式2:

string1=string2 测试string1是否与string2相同

string1!=string2 测试string1是否与string2不同

例:

[root@localhost tmp]# str1="hello"

[root@localhost tmp]# test -n "$str1"

[root@localhost tmp]# echo $?

0

[root@localhost tmp]# test -z "$str1"

[root@localhost tmp]# echo $?

1

[root@localhost tmp]# [ "$str1"!=" " ]

[root@localhost tmp]# echo $?

0

[root@localhost tmp]# [ "$str1" -n " " ]    #方式1不能用于[]

bash: [: -n: binary operator expected

[root@localhost tmp]# test "$str1"!=" "   #方式2通用

[root@localhost tmp]# echo $?

0

文件操作符

test file_operator File

[ file_operator file ]

file_operator:

-d 是否为目录

-f 是否为普通文件

-e 是否存在

-r 是否可读

-w 是否可写

-x 是否可执行

-s 长度是否不为0

-L 是否符号化链接

如:

[ -d clc.txt ]

test -d clc.txt

echo $?

逻辑运算符

! 非

-a 与

-o 或

[ ! -e clc.txt ]   #clc.txt不存在为真(值为0)

[ -e clc.sh -a -x clc.sh ]  #clc.sh存在并且可执行则结果为真

判断

1.

if expression

then

...

fi

2.

if expression; then

...

fi

3.

if expression1

then

...

else

...

fi

4.

if expression1

then

...

elif expression2

then

...

else

...

fi

expression为表达式,如[ -e clc.sh -a -x clc.sh ]

case结构

case variable in

value1)

...;;

value2)

...;;

*)

...;;

esac

算术运算符

+;-;*;/;%;**(幂运算)

例:

let "z=8/5*5"

echo $z    #结果为5,因为8/5取整结果为5

位运算符

<< 左移

>> 右移

| 按位与

~ 按位非

^ 按位异或

例:

[root@localhost tmp]# let "value=~8"

[root@localhost tmp]# echo $value

-9

[root@localhost tmp]# let "value=12|8"

[root@localhost tmp]# echo $value

12

[root@localhost tmp]# value=8

[root@localhost tmp]# let "value<<=2"

[root@localhost tmp]# echo $value

32

注:正数的补码=原码,负数的补码=反码+1。因为8为0000 1000,~8的原码为1111 0111,反码为1000 1000,补码为1000 1001,所以~a=-(a+1)

自增自减运算

[root@localhost tmp]# num=5

[root@localhost tmp]# let "a=5+(++num)"

[root@localhost tmp]# echo $a

11

[root@localhost tmp]# num1=5

[root@localhost tmp]# let "a=5+(num1++)"

[root@localhost tmp]# echo $a

10

[root@localhost tmp]# num2=5

[root@localhost tmp]# let "a=(num2++)+(++num2)"  #6+6

[root@localhost tmp]# echo $a

12

[root@localhost tmp]# echo $num2

7

[root@localhost tmp]# num3=5

[root@localhost tmp]# let "a=(num3++)+(++num3)+(++num3)"  #6+7+7

[root@localhost tmp]# echo $a

20

[root@localhost tmp]# num3=5

[root@localhost tmp]# let "a=(num3++)+(++num3)+(++num3)+(++num3)"  #6+7+8+8

[root@localhost tmp]# echo $a

29

[root@localhost tmp]# num3=5

[root@localhost tmp]# let "a=(num3++)+(++num3)+(++num3)+(++num3)+(++num3)" #6+7+8+9+9

[root@localhost tmp]# echo $a

39

[root@localhost tmp]# num3=5

[root@localhost tmp]# let "a=(num3++)+(++num3)+(++num3)+(++num3)+(++num3)+(num3++)" #6+7+8+9+9+10

[root@localhost tmp]# echo $a

49

[root@localhost tmp]# num3=5

[root@localhost tmp]# let "a=(num3++)+(++num3)+(++num3)+(++num3)+(++num3)+(num3++)+(num3++)"

[root@localhost tmp]# echo $a

60

注:前置++为先自加后运算

数字常量

二进制:2#num

八进制:0num或8#num

十六进制:0xnum或16#num

例:

[root@localhost tmp]# let "num=2#1000"

[root@localhost tmp]# echo $num

8

[root@localhost tmp]# let "num=8#10"

[root@localhost tmp]# echo $num

8

[root@localhost tmp]# let "num=010"

[root@localhost tmp]# echo $num

8

转载于:https://blog.51cto.com/flyclc/1540168

第七章 shell学习之退出、测试、判断及操作相关推荐

  1. 李弘毅机器学习笔记:第七章—深度学习的发展趋势

    李弘毅机器学习笔记:第七章-深度学习的发展趋势 回顾一下deep learning的历史: 1958: Perceptron (linear model) 1969: Perceptron has l ...

  2. 《游戏设计艺术(第二版)》第七章个人学习

    目录 第七章 游戏始于一个创意 灵感 13号透镜:无尽灵感 陈述问题 14号透镜:问题陈述 如何睡眠 潜意识建议1:给予关注 潜意识建议2:记录你的创意 潜意识建议3:(明智的)满足它的欲望 潜意识建 ...

  3. 《图解HTTP》第七章个人学习

    第七章 确保Web安全的HTTPS 7.1 HTTP的缺点 7.2 HTTP+加密+认证+完整性保护 = HTTPS 心得: 网络安全的简单内容,可以了解到HTTPS是什么,这个通信机制可以有效的防止 ...

  4. 第七章 Shell文本处理三剑客之sed

    本章大纲: 7.2 sed 流编辑器,过滤和替换文本. 工作原理:sed命令将当前处理的行读入模式空间进行处理,处理完把结果输出,并清空模式空间.然后再将下一行读入模式空间进行处理输出,以此类推,直到 ...

  5. 深度学习Bible学习笔记:第七章 深度学习中的正则化

    一.正则化介绍 问题:为什么要正则化? NFL(没有免费的午餐)定理: 没有一种ML算法总是比别的好 好算法和坏算法的期望值相同,甚至最优算法跟随机猜测一样 前提:所有问题等概率出现且同等重要 实际并 ...

  6. 《速通机器学习》-第七章 集成学习

    7.1 决策树 在现实生活中,我们每天都会面对各种抉择,例如根据商品的特征和价格决定是否购买.不同于逻辑回归把所有因素加权求和然后通过Sigmoid函数转换成概率进行决策,我们会依次判断各个特征是否满 ...

  7. [学习笔记] python深度学习---第七章 深度学习最佳实践

    一.联合学习 如果只有元数据,那么可以使用one-hot编码,然后用密集连接网络来预测价格.如果只有文本描述,那么可以使用循环神经网络或一维卷积神经网络.如果只有图像,那么可以使用二维卷积神经网络.但 ...

  8. 第五章 shell学习之文件的排序、合并和分割

    sort命令 sort [选项] [输入文件] 选项: -c 测试文件是否已经排序,如果未被排序则输出第一个未被排序的记录 -k 指定排序的域 -m 合并两个已排序的文件,合并的文件也已经排序,如so ...

  9. 第七章软件结构的健壮性——测试与测试优先编程

    1. 软件测试(Software Test) 测试:发现程序中的错误,提高程序正确性的信心. 程序确认的基本方法: 形式化推理(Formal reasoning) 代码评审(Code review) ...

最新文章

  1. 我在不炎熱也不抑鬱的秋天,依然不抽煙
  2. springBoot Maven改成war包
  3. m.2接口和nvme区别_透明款散热不好,那么ORICO 全铝NVMe固态硬盘盒了解一下?
  4. 优化了破网站的搜索功能
  5. Vue mixins学习
  6. java struts2下载zip_Struts2多文件下载
  7. 较为周全的Asp.net提交验证方案(Session版)
  8. linux shell运行脚本,Linux shell脚本中调用另一个shell(exec、source、fork)
  9. scala函数进阶篇
  10. python中的进程(二)
  11. SOLID 原则之依赖倒置原则
  12. 双光耦开关电源电路图_几种常见开关电源电路图
  13. 为什么可积不一定可导_函数可积、原函数存在、变上限函数的关系解读(绝对原创)...
  14. 计算机函数说课ppt,《excel公式与函数》说课稿
  15. Java中的位移操作 、
  16. win10修复计算机没反应,win10修复引导【解决方法】
  17. 蓝桥杯算法提高 快乐司机
  18. 使用JSP从服务器下载文件的示例
  19. vue 单元测试报错之 undefined is not a constructor (evaluating 'expect(vmComponent.count).toBe(1)')
  20. 数据结构5 :DataFrame(Pandas库)

热门文章

  1. Hadoop科普文—常见的45个问题解答 #183; Hadoop
  2. Ubuntu查看端口占用情况
  3. 讲给普通人听的分布式数据存储
  4. 【我的Android进阶之旅】解决Android Studio启动时报错:Java 1.8 or later is required.
  5. Visual Studio 2010生成SQL Server测试数据
  6. 【转】×××精确校验JS
  7. [转载]使用RoboCopy 命令
  8. Android recipe 在代码中写布局
  9. KVM — 安装部署
  10. FD.io/VPP — VNF 应用场景