高级Bash脚本编程(二)

退出

退出状态码

  1. 退出:exit 被用来结束一个脚本,它也返回一个值,并且这个值会传递给脚本的父进程,父进程会使用这个值做下一步的处理。
  2. 每个命令都会返回一个退出状态码,成功的命令返回 0,不成功的命令返回非零值,非零值通常都被解释成一个错误码。
  3. 练习截图

反转条件用法

! 逻辑“非”操作符,将会反转命令或条件测试的结果,并且这会影响退出状态码。

条件判断

if/then 结构用来判断命令列表的退出状态码是否为 0,因为0表示成功,如果成功的话,这里应该那么就执行接下来的一个或多个命令。true返回的是0,false返回的是1

  • test3.sh

多级比较

 #!/bin/bash

 if echo "Next *if* is part of the comparison for the first *if*."
if [[ $comparison = "integer" ]]
then (( a < b )) # (( 算数表达式 )), 用作算数运算
else
[[ $a < $b ]]
fi
then
echo '$a is less than $b'
fi
  • 注意: ((...))和let...如果运算结果为非0,该语句退出码为0,否则为1;[[...]]是作为一个单独的语句并且会返回一个退出码

    ,真返回0,假返回1.

真假判断

NULL和未初始化的变量、初始化为Null的变量,$false为假

(( )) 结构

  • 扩展并计算一个算术表达式的值。如果表达式的结果为0,那么返回的退出状态码为1,或者是"假"。而一个非零值的表达式所返回的退出状态码将为0,或者是"true"。
  • (( ... ))结构可以用来计算并测试算术表达式的结果,退出状态将会与[ ... ]结构完全相反。

文件测试操作符

操作符

说明

  • -e 文件存在
  • -a 文件存在,这个选项的效果与 -e 相同。但是它已经被“弃用”了,并且不鼓励使用。
  • -f 表示这个文件是一个一般文件(并不是目录或者设备文件)
  • -s 文件大小不为零
  • -d 表示这是一个目录
  • -b 表示这是一个块设备(软盘,光驱,等等)
  • -c 表示这是一个字符设备(键盘,modem,声卡,等等)
  • -p 这个文件是一个管道
  • -h 这是一个符号链接
  • -L 这是一个符号链接
  • -S 表示这是一个socket
  • -t 文件(描述符)被关联到一个终端上,这个测试选项一般被用来检测脚本中的stdin([ -t 0 ]) 或者 stdout([ -t 1 ])是否来自于一个终端
  • -r 文件是否具有可读权限(指的是正在运行这个测试命令的用户是否具有读权限)
  • -w 文件是否具有可写权限(指的是正在运行这个测试命令的用户是否具有写权限)
  • -x 文件是否具有可执行权限(指的是正在运行这个测试命令的用户是否具有可执行权限)
  • -g set-group-id(sgid)标记被设置到文件或目录上
  • -k 设置粘贴位
  • -O 判断你是否是文件的拥有者
  • -G 文件的group-id是否与你的相同
  • -N 从文件上一次被读取到现在为止, 文件是否被修改过
  • f1 -nt f2 文件f1比文件f2新
  • f1 -ot f2 文件f1比文件f2旧
  • f1 -ef f2 文件f1和文件f2是相同文件的硬链接
  • ! “非”,反转上边所有测试的结果(如果没给出条件,那么返回真)

二元比较操作符

整数比较

  • -eq 等于

    if [ "\(a" -eq "\)b" ]

  • -ne 不等于

    if [ "\(a" -ne "\)b" ]

  • -gt 大于

    if [ "\(a" -gt "\)b" ]

  • -ge 大于等于

    if [ "\(a" -ge "\)b" ]

  • -lt 小于

    if [ "\(a" -lt "\)b" ]

  • -le 小于等于

    if [ "\(a" -le "\)b" ]

  • < 小于(在双括号中使用)

    (("\(a" < "\)b"))

  • <= 小于等于(在双括号中使用)

    (("\(a" <= "\)b"))

  • 大于(在双括号中使用)

    (("\(a" > "\)b"))

  • = 大于等于(在双括号中使用)

    (("\(a" >= "\)b"))

字符串比较

  • = 等于

    if [ "\(a" = "\)b" ]

  • == 等于,与=等价

    if [ "\(a" == "\)b" ]

  • != 不等号

    if [ "\(a" != "\)b" ]

  • < 小于,按照ASCII字符进行排序

    if [[ "\(a" < "\)b" ]]

    if [ "\(a" \< "\)b" ]

    注意"<"使用在[ ]结构中的时候需要被转义

  • 大于,按照ASCII字符进行排序

    if [[ "\(a" > "\)b" ]]

    if [ "\(a" \> "\)b" ]

    注意“>”使用在[ ]结构中的时候需要被转义

  • -z 字符串为“null”,意思就是字符串长度为零 -n 字符串不为“null”

实验过程截图

高级Bash脚本编程(二)的更多相关文章

  1. 高级Bash脚本编程指南(27):文本处理命令(三)

    高级Bash脚本编程指南(27):文本处理命令(三) 成于坚持,败于止步 处理文本和文本文件的命令 tr 字符转换过滤器. 必须使用引用或中括号, 这样做才是合理的. 引用可以阻止shell重新解释出 ...

  2. 高级Bash脚本编程指南《Advanced Bash-Scripting Guide》 in Chinese

    <Advanced Bash-Scripting Guide> in Chinese <高级Bash脚本编程指南>Revision 10中文版 在线阅读链接:http://ww ...

  3. 高级bash脚本编程(三)

    高级bash脚本编程 知识点 compound 和 comparison -a 逻辑与 exp1 -a exp2 如果表达式 exp1 和 exp2 都为真的话,那么结果为真. -o 逻辑或 exp1 ...

  4. 高级Bash脚本编程(一)

    高级Bash脚本编程 Bash 它是能力很强的计算机语言,被称为解释性语言或脚本语言,它可以调用所有的UNIX命令和工具再加上公共程序. Bash中的特殊字符 注释(#) (除#!外,#!是用于指定当 ...

  5. advanced base-scripting guide in chinese(高级Bash脚本编程指南-10)

    <高级Bash脚本编程指南>Revision 10中文版 github上链接地址: https://github.com/LinuxStory/Advanced-Bash-Scriptin ...

  6. 《Advanced Bash-Scripting Guide》 in Chinese 高级Bash脚本编程指南》Revision 10中文版

    <Advanced Bash-Scripting Guide> in Chinese <高级Bash脚本编程指南>Revision 10中文版 在线阅读链接:http://ww ...

  7. 脚本命令高级Bash脚本编程指南(31):数学计算命令

    题记:写这篇博客要主是加深自己对脚本命令的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. 高等Bash脚本编程指南(31):数学盘算命令 成于坚持,败于止步 操作数字 factor ...

  8. 实验楼-高级Bash脚本编程指南

    实验1.Bash介绍与入门 1.简介:Bash是一个为GNU计划编写的Unix shell,它是许多Linux平台默认使用的shell shell是一个命令解释器,是介于操作系统内核与用户之间的一个绝 ...

  9. 实验楼高级bash脚本编程指南 挑战:简单的热身

    传送门:https://www.shiyanlou.com/courses/running# 步骤一 新建一个 test.sh 输出 Hello Shiyanlou! 步骤二 复制 test.sh 为 ...

随机推荐

  1. 进程保护--CrossThreadFlags标志位

    原理: 1. 将进程的所有线程的线程CrossThreadFlags标志位设置成Terminated或者System. 效果:任务管理器,WSYSCheck,ICESWORD无法结束进程.. 但PCH ...

  2. poj_2553 强连通分支&出度为0的点

    题目大意 N个点的有向图中,定义“好点”为: 从该点v出发可以到达的所有点u,均有一条路径使得u可达v. 求出图中所有的“好点”,并按照顺序从小到大输出出来. 题目分析 图存在多个强连通分支,强连通分 ...

  3. BNU4204:动物PK

    稀奇稀奇真稀奇,动物园摆出了擂台赛.小动物们纷纷上台比试,谁能获得最后的冠军呢? 动物园长发现小动物们打擂只与自身的三项属性有关:血量,攻击力和防御力.此外,小动物在赛前都为自己准备了一系列的攻击计划 ...

  4. 网络子系统46_ip协议数据帧的转发

    //调用路径ip_rcv->ip_rcv_finish->dst_input->(skb->dst->input) //ip_forward以回调函数的形式,保存在skb ...

  5. UVa 673 Parentheses Balance (stack)

    题目描述 : 判断字符串是不是符合正确的表达式形式. 要点 : 考虑字符串为空的时候,用getline输入,每一次判断后如果为No则要清空栈.对称思想. 注意输入格式. 代码: #include &l ...

  6. Module 'null' not found异常解决办法

    百度原因:是因为在   /WEB_INF/web.xml文件中   <servlet> <servlet-name>ActionServlet</servlet-name ...

  7. [黑金原创教程] FPGA那些事儿《设计篇 III》- 图像处理前夕·再续

    简介 一本为入门图像处理的入门书,另外还教你徒手搭建平台(片上系统),内容请看目录. 注意 为了达到最好的实验的结果,请准备以下硬件. AX301开发板, OV7670摄像模块, VGA接口显示器, ...

  8. 部署软件RDMA的步骤

    date:  2018-08-28   19:46:56 参考原文原文:http://corasql.blog.51cto.com/5908329/1930455                    ...

  9. JQuery 用法总结

    1.隐藏与显示,用于div等等 //隐藏id=myTab下的所有li标签 $("#myTab li").hide(); //动画隐藏,1秒内隐藏该对象 $(); //显示class ...

  10. Gallery 里面怎么设置ImageView的OnClick事件

    Gallery g=this.findViewById(R.id.gallery); g.setOnItemClickListener(new OnItemClickListener(){ @Over ...