高级Bash脚本编程

Bash

它是能力很强的计算机语言,被称为解释性语言或脚本语言,它可以调用所有的UNIX命令和工具再加上公共程序。

Bash中的特殊字符

  • 注释(#) (除#!外,#!是用于指定当前脚本的解释器,我们这里为bash,且应该指明完整路径,所以为/bin/bash)
  • 分号(;)
    1. 命令分隔符
    2. 终止case选项,使用双分号(;;)可以终止case选项。
     #!/bin/bash

     varname=b

    case "$varname" in
[a-z]) echo "abc";;
[0-9]) echo "123";;
esac
  • 点号(.)
  1. 等价于source命令,读取并执行FileName.sh中的命令
  • 引号

    1. 双引号(“)"STRING" 将会阻止(解释)STRING中大部分特殊的字符
    2. 单引号(') 'STRING' 将会阻止STRING中所有特殊字符的解释,这是一种比使用"更强烈的形式
  • 斜线和反斜线

    1. 斜线(/)文件名路径分隔符,除法。
    2. 反斜线()转意 \ 通常用来转义双引号(")和单引号(')
  • 反引号(`)

    1. 命令替换,反引号中的命令会优先执行
  • 冒号(:)

    1. 空命令,在条件中等价于ture,在条件中表示什么也不做
    2. 变量扩展/子串替换,:>清空文件,但是并不会修改这个文件的权限。如果之前这个文件并不存在,那么就创建这个文件。:>>如果这个文件之前并不存在,那么就创建它。":"还用来在 /etc/passwd 和 $PATH 变量中做分隔符。
  • 问号(?)测试操作符 t=a<50?8:9

  • 美元($)

    1. 变量替换
    2. 命令替换
  • 小括号

    1. 命令组,在括号中的命令列表,将会作为一个子 shell (里面的变量是局部的)来运行
    2. 初始化数据
  • 大括号

    1. 文件名拓展(在大括号中,不允许有空白,除非这个空白被引用或转义。)例cp t.{txt,back}

    2. 代码块,又被称为内部组,这个结构事实上创建了一个没有名字的函数。(里面的变量是全局有效的)

  • 中括号

    1. 条件测试
    2. 数组的元素 a[0]
  • 尖括号 重定向

    1. test.sh > filename 重定向test.sh的输出到文件 filename 中。如果 filename 存在的话,那么将会被覆盖。
    2. test.sh &> filename 重定向 test.sh 的 stdout(标准输出)和 stderr(标准错误)到 filename 中。
    3. test.sh >&2 重定向 test.sh 的 stdout 到 stderr 中。
    4. test.sh >> filename 把 test.sh 的输出追加到文件 filename 中。如果filename 不存在的话,将会被创建。
  • 竖线(|) 管道:分析前边命令的输出,并将输出作为后边命令的输入。这是一种产生命令链的好方法。

  • 破折号(-)

    1. 选项,前缀 在所有的命令内如果想使用选项参数的话,前边都要加上“-”。
    2. 用于重定向stdin或stdout
  • 波浪号(~)表示home目录

变量和参数

变量的名字就是变量保存值的地方。引用变量的值就叫做变量替换。

等号可以赋值,也可以做条件测试

Bash并不区分变量的"类型"

特殊变量

  • 局部变量
  • 环境变量
  • 位置参数

引用和转意

引用

  • 保留 $ 作为特殊字符的意义是为了能够在双引号中也能够正常的引用变量("$variable")。
  • $、`(后置引用)和 ""(转义符)在双引号中能使用
  • 在echo语句中,只有在单词分割或者需要保留空白的时候,才需要把参数用双引号括起来。
  • 当我们设置了bash内置变量IFS后,再使用echo输出时,会将所设定的字符用空格去代替。
  • 单引号(全引用)是一种比双引号(部分引用)更严格的引用方法。

转意

  • \n 表示新的一行
  • \r 表示回车
  • \t 表示水平制表符
  • \v 表示垂直制表符
  • \b 表示后退符
  • \a 表示"alert"(蜂鸣或者闪烁)
  • \0xx 转换为八进制的ASCII码, 等价于0xx
  • " 表示引号字面的意思,如:

注意:

  • 强烈注意, 在赋值的的时候, 等号前后一定不要有空格.
  • 如果在变量中存在空白,那么就必须加上引号

未完待续

参考资料

高级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脚本编程(二) 退出 退出状态码 退出:exit 被用来结束一个脚本,它也返回一个值,并且这个值会传递给脚本的父进程,父进程会使用这个值做下一步的处理. 每个命令都会返回一个退出状态码,成 ...

  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. 【mysql】mysql front 提示Access violation at address 010C9CD0 in module ‘mysql-front.exe’

    1 错误描述: 利用mysql-front 工具新建数据库.提示了一下错误 2 解决办法: 内存越界问题,最好重新注册下Windows的动态链接库 首先“开始”—“cmd” 在打开的dos窗口中运行

  2. linux ctags

    在vim 下查找函数的定义是比较方法的事情,尤其是是跨文件的时候. 这时候可以通过安装ctags来实现函数定义跳转. 安装可以直接百度. 安装好之后,首先需要配置vim, 因为一般只有vim打开的文件 ...

  3. MQTT协议笔记之订阅

    前言 记忆不太好的时候,只能翻看以前的文章/笔记重新温习一遍,但找不到MQTT协议有关订阅部分的描述,好不容易从Evernote中找到贴出来,这样整个MQTT协议笔记,就比较齐全了. SUBSCRIB ...

  4. JS-鼠标彩色拖尾小效果

    实现步骤解析: * 这原本就是一个鼠标后面跟随一串小方块的效果,     * 后来我就想,运用之前学的随机数的案例把小方块的颜色做成彩色的,     * 并且每一个小方块的色彩是随机分配而不是我自己手 ...

  5. 【黑金ZYNQ7000系列原创视频教程】02.视频接口——hdmi编码输出实验

    黑金论坛地址: http://www.heijin.org/forum.php?mod=viewthread&tid=36636&extra=page%3D1 爱奇艺地址: http: ...

  6. ORA-28056 解决方法

    用pl/sql devlper 来连接oracle数据库,遇到 0RA-28056错误,解决的方法是 在 计算机-->管理 -->事件查看器里边清理应用程序日志(问题原因是应用程序的日志满 ...

  7. 二、微信小游戏开发 多线程Worker

    微信多线程Worker教程 微信多线程Worker API 一.创建Worker,并和当前线程通讯 多线程worker只能创建1个.能和当前线程互传数据. 创建worker 在微信开发者工具中,在当前 ...

  8. Android中textView自动识别电话号码,电子邮件,网址(自动加连接)

    extends:http://blog.csdn.net/wx_962464/article/details/8471195 其实这个是很简单的,在android中已经为我们实现了,但是我估计很多人都 ...

  9. linux下的进程,子进程,线程

    1.相同点:(a)二者都具有ID,一组寄存器,状态,优先级以及所要遵循的调度策略.(b) 每个进程都有一个进程控制块,线程也拥有一个线程控制块.(c) 线程和子进程共享父进程中的资源:线程和子进程独立 ...

  10. mysql 约束条件 not null与default

    not null与default 是否可空,null表示空,非字符串not null - 不可空null - 可空 use db4: 默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动 ...