高级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. Linux find、grep命令详细用法

    在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下:find命令 find命令的一般形式 ...

  2. Request.getRequestURL

    getRequestURI()就相当于你在写一个JSP页面的时候会有这样的东西"action='/WebRoot/xxx'"这个方法就是获得'/WebRoot/xxx',也就是说它 ...

  3. 解决在微信中部分IOS不能自动播放背景音乐

    前言在做各种HTML5场景页面的时候,插入背景音乐是一个很普遍的需求.我们都知道,IOS下的safari是无法自动播放音乐的,以至一直以来造成一种错误的认识,iso是无法自动播放媒体资源的.直到微信火 ...

  4. Oracle存储过程--案例

    限额控制 CREATE OR REPLACE PACKAGE BODY NP_PCKG_MERCHANT_LIMIT AS PROCEDURE CHECK_LIMIT ( in_iplCode IN ...

  5. mac必装工具以及mac使用介绍

    必装工具 Scroll Reverserhttp://pilotmoon.com/scrollreverser/:一款可以使得鼠标使用方式和windows系统一致的软件 编程工具 ,,,,, 常用快捷 ...

  6. apache工作模式worker以及prefork的切换

    apache比较常用的工作模式有worker以及prefork两种方式. 如果在编译时候不指定,系统默认的是prefork模式:如果需要换成worker模式,需要在编译的时候带上编译参数:--with ...

  7. New动态分配 Delete 释放内存

    在C++中,对于变量和对象都是编译器在编译时分配好的,对于数组初始化时,无法确定多少内存,很容意造成大开小用的情况. new  动态分配 一般格式:1. 指针变量名 =new  类型标识符; 2.指针 ...

  8. docker基本操作命令

    1. 构建镜像 docker build -t centos/tomcat:7.0 2. 创建一个容器 docker run --name test-tomcat centos/tomcat:7.0 ...

  9. Java使用极小的内存完成对超大数据的去重计数,用于实时计算中统计UV

    Java使用极小的内存完成对超大数据的去重计数,用于实时计算中统计UV – lxw的大数据田地 http://lxw1234.com/archives/2015/09/516.htm Java使用极小 ...

  10. handle exceptions, opening and closing database connections

    https://www.tutorialspoint.com/spring/spring_jdbc_framework.htm Spring - JDBC Framework Overview Whi ...