第七章 shell学习之退出、测试、判断及操作
退出状态
$?记录了上一个命令的退出状态:
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学习之退出、测试、判断及操作相关推荐
- 李弘毅机器学习笔记:第七章—深度学习的发展趋势
李弘毅机器学习笔记:第七章-深度学习的发展趋势 回顾一下deep learning的历史: 1958: Perceptron (linear model) 1969: Perceptron has l ...
- 《游戏设计艺术(第二版)》第七章个人学习
目录 第七章 游戏始于一个创意 灵感 13号透镜:无尽灵感 陈述问题 14号透镜:问题陈述 如何睡眠 潜意识建议1:给予关注 潜意识建议2:记录你的创意 潜意识建议3:(明智的)满足它的欲望 潜意识建 ...
- 《图解HTTP》第七章个人学习
第七章 确保Web安全的HTTPS 7.1 HTTP的缺点 7.2 HTTP+加密+认证+完整性保护 = HTTPS 心得: 网络安全的简单内容,可以了解到HTTPS是什么,这个通信机制可以有效的防止 ...
- 第七章 Shell文本处理三剑客之sed
本章大纲: 7.2 sed 流编辑器,过滤和替换文本. 工作原理:sed命令将当前处理的行读入模式空间进行处理,处理完把结果输出,并清空模式空间.然后再将下一行读入模式空间进行处理输出,以此类推,直到 ...
- 深度学习Bible学习笔记:第七章 深度学习中的正则化
一.正则化介绍 问题:为什么要正则化? NFL(没有免费的午餐)定理: 没有一种ML算法总是比别的好 好算法和坏算法的期望值相同,甚至最优算法跟随机猜测一样 前提:所有问题等概率出现且同等重要 实际并 ...
- 《速通机器学习》-第七章 集成学习
7.1 决策树 在现实生活中,我们每天都会面对各种抉择,例如根据商品的特征和价格决定是否购买.不同于逻辑回归把所有因素加权求和然后通过Sigmoid函数转换成概率进行决策,我们会依次判断各个特征是否满 ...
- [学习笔记] python深度学习---第七章 深度学习最佳实践
一.联合学习 如果只有元数据,那么可以使用one-hot编码,然后用密集连接网络来预测价格.如果只有文本描述,那么可以使用循环神经网络或一维卷积神经网络.如果只有图像,那么可以使用二维卷积神经网络.但 ...
- 第五章 shell学习之文件的排序、合并和分割
sort命令 sort [选项] [输入文件] 选项: -c 测试文件是否已经排序,如果未被排序则输出第一个未被排序的记录 -k 指定排序的域 -m 合并两个已排序的文件,合并的文件也已经排序,如so ...
- 第七章软件结构的健壮性——测试与测试优先编程
1. 软件测试(Software Test) 测试:发现程序中的错误,提高程序正确性的信心. 程序确认的基本方法: 形式化推理(Formal reasoning) 代码评审(Code review) ...
最新文章
- 我在不炎熱也不抑鬱的秋天,依然不抽煙
- springBoot Maven改成war包
- m.2接口和nvme区别_透明款散热不好,那么ORICO 全铝NVMe固态硬盘盒了解一下?
- 优化了破网站的搜索功能
- Vue mixins学习
- java struts2下载zip_Struts2多文件下载
- 较为周全的Asp.net提交验证方案(Session版)
- linux shell运行脚本,Linux shell脚本中调用另一个shell(exec、source、fork)
- scala函数进阶篇
- python中的进程(二)
- SOLID 原则之依赖倒置原则
- 双光耦开关电源电路图_几种常见开关电源电路图
- 为什么可积不一定可导_函数可积、原函数存在、变上限函数的关系解读(绝对原创)...
- 计算机函数说课ppt,《excel公式与函数》说课稿
- Java中的位移操作 、
- win10修复计算机没反应,win10修复引导【解决方法】
- 蓝桥杯算法提高 快乐司机
- 使用JSP从服务器下载文件的示例
- vue 单元测试报错之 undefined is not a constructor (evaluating 'expect(vmComponent.count).toBe(1)')
- 数据结构5 :DataFrame(Pandas库)