高级Bash脚本编程(一)
高级Bash脚本编程
Bash
它是能力很强的计算机语言,被称为解释性语言或脚本语言,它可以调用所有的UNIX命令和工具再加上公共程序。
Bash中的特殊字符
- 注释(#) (除#!外,#!是用于指定当前脚本的解释器,我们这里为bash,且应该指明完整路径,所以为/bin/bash)
- 分号(;)
- 命令分隔符
- 终止case选项,使用双分号(;;)可以终止case选项。
#!/bin/bash
varname=b
case "$varname" in
[a-z]) echo "abc";;
[0-9]) echo "123";;
esac
- 点号(.)
- 等价于source命令,读取并执行FileName.sh中的命令
引号
- 双引号(“)"STRING" 将会阻止(解释)STRING中大部分特殊的字符
- 单引号(') 'STRING' 将会阻止STRING中所有特殊字符的解释,这是一种比使用"更强烈的形式
斜线和反斜线
- 斜线(/)文件名路径分隔符,除法。
- 反斜线()转意 \ 通常用来转义双引号(")和单引号(')
反引号(`)
- 命令替换,反引号中的命令会优先执行
冒号(:)
- 空命令,在条件中等价于ture,在条件中表示什么也不做
- 变量扩展/子串替换,:>清空文件,但是并不会修改这个文件的权限。如果之前这个文件并不存在,那么就创建这个文件。:>>如果这个文件之前并不存在,那么就创建它。":"还用来在 /etc/passwd 和 $PATH 变量中做分隔符。
问号(?)测试操作符 t=a<50?8:9
美元($)
- 变量替换
- 命令替换
小括号
- 命令组,在括号中的命令列表,将会作为一个子 shell (里面的变量是局部的)来运行
- 初始化数据
大括号
文件名拓展(在大括号中,不允许有空白,除非这个空白被引用或转义。)例cp t.{txt,back}
代码块,又被称为内部组,这个结构事实上创建了一个没有名字的函数。(里面的变量是全局有效的)
中括号
- 条件测试
- 数组的元素 a[0]
尖括号 重定向
- test.sh > filename 重定向test.sh的输出到文件 filename 中。如果 filename 存在的话,那么将会被覆盖。
- test.sh &> filename 重定向 test.sh 的 stdout(标准输出)和 stderr(标准错误)到 filename 中。
- test.sh >&2 重定向 test.sh 的 stdout 到 stderr 中。
- test.sh >> filename 把 test.sh 的输出追加到文件 filename 中。如果filename 不存在的话,将会被创建。
竖线(|) 管道:分析前边命令的输出,并将输出作为后边命令的输入。这是一种产生命令链的好方法。
破折号(-)
- 选项,前缀 在所有的命令内如果想使用选项参数的话,前边都要加上“-”。
- 用于重定向stdin或stdout
波浪号(~)表示home目录
变量和参数
变量的名字就是变量保存值的地方。引用变量的值就叫做变量替换。
等号可以赋值,也可以做条件测试
Bash并不区分变量的"类型"
特殊变量
- 局部变量
- 环境变量
- 位置参数
引用和转意
引用
- 保留 $ 作为特殊字符的意义是为了能够在双引号中也能够正常的引用变量("$variable")。
- $、`(后置引用)和 ""(转义符)在双引号中能使用
- 在echo语句中,只有在单词分割或者需要保留空白的时候,才需要把参数用双引号括起来。
- 当我们设置了bash内置变量IFS后,再使用echo输出时,会将所设定的字符用空格去代替。
- 单引号(全引用)是一种比双引号(部分引用)更严格的引用方法。
转意
- \n 表示新的一行
- \r 表示回车
- \t 表示水平制表符
- \v 表示垂直制表符
- \b 表示后退符
- \a 表示"alert"(蜂鸣或者闪烁)
- \0xx 转换为八进制的ASCII码, 等价于0xx
- " 表示引号字面的意思,如:
注意:
- 强烈注意, 在赋值的的时候, 等号前后一定不要有空格.
- 如果在变量中存在空白,那么就必须加上引号
未完待续
参考资料
高级Bash脚本编程(一)的更多相关文章
- 高级Bash脚本编程指南(27):文本处理命令(三)
高级Bash脚本编程指南(27):文本处理命令(三) 成于坚持,败于止步 处理文本和文本文件的命令 tr 字符转换过滤器. 必须使用引用或中括号, 这样做才是合理的. 引用可以阻止shell重新解释出 ...
- 高级Bash脚本编程指南《Advanced Bash-Scripting Guide》 in Chinese
<Advanced Bash-Scripting Guide> in Chinese <高级Bash脚本编程指南>Revision 10中文版 在线阅读链接:http://ww ...
- 高级bash脚本编程(三)
高级bash脚本编程 知识点 compound 和 comparison -a 逻辑与 exp1 -a exp2 如果表达式 exp1 和 exp2 都为真的话,那么结果为真. -o 逻辑或 exp1 ...
- 高级Bash脚本编程(二)
高级Bash脚本编程(二) 退出 退出状态码 退出:exit 被用来结束一个脚本,它也返回一个值,并且这个值会传递给脚本的父进程,父进程会使用这个值做下一步的处理. 每个命令都会返回一个退出状态码,成 ...
- advanced base-scripting guide in chinese(高级Bash脚本编程指南-10)
<高级Bash脚本编程指南>Revision 10中文版 github上链接地址: https://github.com/LinuxStory/Advanced-Bash-Scriptin ...
- 《Advanced Bash-Scripting Guide》 in Chinese 高级Bash脚本编程指南》Revision 10中文版
<Advanced Bash-Scripting Guide> in Chinese <高级Bash脚本编程指南>Revision 10中文版 在线阅读链接:http://ww ...
- 脚本命令高级Bash脚本编程指南(31):数学计算命令
题记:写这篇博客要主是加深自己对脚本命令的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. 高等Bash脚本编程指南(31):数学盘算命令 成于坚持,败于止步 操作数字 factor ...
- 实验楼-高级Bash脚本编程指南
实验1.Bash介绍与入门 1.简介:Bash是一个为GNU计划编写的Unix shell,它是许多Linux平台默认使用的shell shell是一个命令解释器,是介于操作系统内核与用户之间的一个绝 ...
- 实验楼高级bash脚本编程指南 挑战:简单的热身
传送门:https://www.shiyanlou.com/courses/running# 步骤一 新建一个 test.sh 输出 Hello Shiyanlou! 步骤二 复制 test.sh 为 ...
随机推荐
- js jquery获取当前元素的兄弟级 上一个 下一个元素 jquery如何获取第一个或最后一个子元素
var chils= s.childNodes; //得到s的全部子节点 var par=s.parentNode; //得到s的父节点 var ns=s.nextSbiling; //获得 ...
- poj_2553 强连通分支&出度为0的点
题目大意 N个点的有向图中,定义“好点”为: 从该点v出发可以到达的所有点u,均有一条路径使得u可达v. 求出图中所有的“好点”,并按照顺序从小到大输出出来. 题目分析 图存在多个强连通分支,强连通分 ...
- Delphi使用ADO连接网络数据库,断网后重连问题
原始文章: https://blog.csdn.net/blog_jihq/article/details/11737699# 使用TADOConnection对象连接网络数据库(以MySQL为例), ...
- linux 下 git gem 等代理设置问题
github.com,作为程序员的代码仓库,我们经常会用到.但有时候我们不能直接通过网络链接它,只能通过代理. 这里我有一台代理服务器,起初我以为在终端设置了代理环境就行了,其设置为在你的~/.bas ...
- linux显示文件列表命令ls,使用ls --help列出所有命令参数
ls命令的相关参数 在提示符下输入ls --help ,屏幕会显示该命令的使用格式及参数信息: 先介绍一下ls命令的主要参数: -a 列出目录下的所有文件,包括以 . 开头的隐含文件. -A 显示除 ...
- Linux系统下 MongoDB安装搭建
1.下载linux的mongodb 2.在目录usr/local下创建文件夹mongodb,把安装包解压到该文件夹中 # mkdir mongodb # tar -zxvf mongodb-3.4.2 ...
- 170706、springboot编程之文件上传
使用thymleaf模板,自行导入依赖! 一.单文件上传 1.编写单文件上传页面singleFile.html <!DOCTYPE html> <html xmlns="h ...
- .Net 获取前端传递的数据
1. DotNet MVC: form是用来获得表单提交的数据:querystring是用来获得标识在URL后面的所有返回的变量及其值. 比如常见的URL网页地址都有xxx.asp?pn=123456 ...
- android的一些类库的优缺点
经过本人的面试经验,以及接触的android项目,总结了一下android的一些类库的优缺点: 一,线程方面 1.AsyncTask 首先是线程优化以及缺陷方面,针对目前大多数类库来说,都有好的设计方 ...
- uchome 不从缓存中读取模板
/source/function_common.php中的代码 //模板调用 function template($name) { global $_SCONFIG, $_SGLOBAL; if($_ ...