高级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. php 数据库练习之租房子

    题目: 示例图 本次只做图4这个表,因为之前的都已做过 自己在mydb数据库建了一个house表 如图: 自己做的代码: <!DOCTYPE html PUBLIC "-//W3C// ...

  2. Go基础---->go的基础学习(五)

    这里是go中关于io的一些知识.有时不是你装得天衣无缝,而是我愿意陪你演得完美无缺. go中关于io的使用 一.Reader中的Read方法 Read 用数据填充指定的字节 slice,并且返回填充的 ...

  3. Java三方---->Thumbnailator框架的使用

    Thumbnailator是一个用来生成图像缩略图的 Java类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图.有了它我们就不用在费心思使用Image I/O API,J ...

  4. java 集合之HashMap

    原文出处http://zhangshixi.iteye.com/blog/672697 1.    HashMap概述: HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操 ...

  5. 【BZOJ4429】[Nwerc2015] Elementary Math小学数学 最大流

    [BZOJ4429][Nwerc2015] Elementary Math小学数学 Description Ellen给她的学生教小学数学.期末考试已经来临了.考试有n个题目,每一个题目学生们都要对一 ...

  6. 利用trace重建控制文件

    以下步骤,内容都在ora11g_ora_.trc文件中 CREATE CONTROLFILE REUSE DATABASE "ORA11G" NORESETLOGS  ARCHIV ...

  7. linux对文件某列求和

    对文件某列求和: -F,用,号分隔,求第3行的和 awk -F,  '{sum += $3};END {print sum}' test

  8. mysql : show processlist 详解

    最近排查一些MySQL的问题,会经常用到 show processlist,所以在这里把这个命令总结一下,做个备忘,以备不时只需. 首先是几条常用的SQL. 1.按客户端 IP 分组,看哪个客户端的链 ...

  9. 自定义Realm解析

    自定义Realm解析---------------------------------------> /* * Copyright 2005-2013 shopxx.net. All right ...

  10. pta 习题集 数列求和-加强版

    给定某数字AA(1≤A≤91≤A≤9)以及非负整数NN(0≤N≤1000000≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯AS=A+AA+AAA+⋯+AA⋯A(NN个AA).例如A ...