实验楼-高级Bash脚本编程指南
实验1.Bash介绍与入门
1.简介:Bash是一个为GNU计划编写的Unix shell,它是许多Linux平台默认使用的shell
shell是一个命令解释器,是介于操作系统内核与用户之间的一个绝缘层。所有的UNIX命令和工具再加上公共程序,对于Shell脚本来说,都是可调用的。
2.运行Bash脚本的方式: 1)使用shell来执行:sh hello.sh
2)使用Bash来执行:bash hello.sh
3)还可以让脚本本身就具有可执行权限,通过chmod命令可以修改:chmod u+rx hello.sh 然后运行 ./hello.sh
3.使用重定向:>为重定向符号,例如将输出文件保存在一个txt中, eg: echo "hello world">my.txt
4.使用脚本清除/var/log下的log文件:
/dev/null 可以理解为一个黑洞,里面是空的,什么东西都可以往里面扔,扔了就没了。
实验2.Bash中的特殊字符(上)
1.注释:#为注释
#!用于指定当前脚本的解释器,这里用bash,应该知名其完整路径,即#!/bin/bash
在echo中转义的#是不能作为注释的,eg:echo The \# here doesn't begin a comment
2.分号:1)使用分号可以在同一行上写两个或两个以上的命令
2)使用双分号可以终止case选项
3.点号:等价于source命令,用于在当前Bash环境下读取并执行filename.sh中的命令
4.引号:1)“ ”:双引号会组织string中大部分特殊字符
2)‘ ’:单引号会组织string中所有特殊字符的解释,这是一种比双引号更强烈的形式
5.斜线和反斜线:1)斜线 /:文件名路径分隔符,分割文件名不同的部分;也可以用作除法算术操作符。注意在Linux中表示路径的时候,许多个/和一个/是一样的效果
2)反斜线:一种对单字符的引用机制,转义表示
6.反引号:命令替换,command结构可以将命令的输出赋值到一个变量中去。反引号中的命令会优先执行
eg: cp `mkdir back` hello.sh back
7.冒号:1)空命令:等价于“NOP”,也可以被认为与shell的内建命令true作用相同,退出码是(0),即while:与while true语义相同
2)变量扩展/子串替换
与>重定向操作符结合使用时,将会把一个文件清空,但不会修改这个文件的权限,如果之前这个文件不存在,就创建这个文件
与>>重定向操作符结合使用时,将不会对预先存在的目标文件产生任何影响,如果这个文件不存在,就创建这个文件
3)注释行(不推荐)
4)用来在/etc/passwd和$PATH变量中做分隔符
8.冒号
1)测试操作符:在一个双括号结构中,?就是c语言的三元操作符
9.美元符号($)
1)变量替换
2)命令替换
实验3-bash中的特殊字符(下)
1.小括号()
1)命令组:在括号中的命令列表,会作为一个子shell来运行。由于是在子shell中,所以脚本剩下的部分是不可用的。父脚本,即脚本本身,将不能够读取在子进程中创建的变量。
2)初始化数组:arr=(1 2 4 5)
echo ${arr[2]}
2.大括号{}
1)文件名扩展,eg cp t.{txt,back}---没太懂
2)代码块,又被称为内部组,这个结构事实上创建了一个匿名函数。然而,与标准函数不同的是,其声明的变量,对于脚本其他部分的代码来说还是可见的
3.中括号[]
1)条件测试:条件测试放在[]中,其中[shell内建test命令的一部分,不是/usr/bin/test中的外部命令的一个链接,双中括号[[ ]]也用作条件测试
2)数组元素:数组中每个元素的标号
4.尖括号(< 和 >)
1)重定向: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不存在将会被创建
5.竖线(|)
1)管道:分析前边命令的输出,并将输出作为后边命令的输入,这是一种产生命令链的好方法。eg: ls -l | ./test.sh #把ls -1的输出输送到一个脚本中
6.破折号(-)
1)选项,前缀:在所有的命令内如果想使用选项参数的话都要加上前缀
2)用于重定向stdin或stdout
7.波浪号(~):表示home目录
实验4-变量和参数
1.变量赋值:赋值时等号前后一定不要有空格;等号既可以做条件测试操作,也可以用于赋值操作
变量引用:引用一个变量将保留其中的空白,如果是变量替换就不会有了,所以在shell中如果想打印空白字符,需要用双引号进行引用"$hello"
多变量设置:同一行要设置多个变量,应该用空格隔开
2.变量不区分类型:与大多数编译型语言不同,Bash不区分变量的类型。本质上,Bash变量都是字符串,但是依赖于具体的上下文,Bash也允许比较操作和整数操作,其中的关键因素是,为变量赋的值是否只有数字。
case "$varname" in
[a-z]) echo "abc";;
[-]) echo "";;
esac
实验楼-高级Bash脚本编程指南的更多相关文章
- 实验楼高级bash脚本编程指南 挑战:简单的热身
传送门:https://www.shiyanlou.com/courses/running# 步骤一 新建一个 test.sh 输出 Hello Shiyanlou! 步骤二 复制 test.sh 为 ...
- 高级Bash脚本编程指南(27):文本处理命令(三)
高级Bash脚本编程指南(27):文本处理命令(三) 成于坚持,败于止步 处理文本和文本文件的命令 tr 字符转换过滤器. 必须使用引用或中括号, 这样做才是合理的. 引用可以阻止shell重新解释出 ...
- 高级Bash脚本编程指南《Advanced Bash-Scripting Guide》 in Chinese
<Advanced Bash-Scripting Guide> in Chinese <高级Bash脚本编程指南>Revision 10中文版 在线阅读链接:http://ww ...
- 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脚本编程指南
http://www.cnblogs.com/rollenholt/archive/2012/04/20/2458763.html
- 高级bash脚本编程(三)
高级bash脚本编程 知识点 compound 和 comparison -a 逻辑与 exp1 -a exp2 如果表达式 exp1 和 exp2 都为真的话,那么结果为真. -o 逻辑或 exp1 ...
- 高级Bash脚本编程(二)
高级Bash脚本编程(二) 退出 退出状态码 退出:exit 被用来结束一个脚本,它也返回一个值,并且这个值会传递给脚本的父进程,父进程会使用这个值做下一步的处理. 每个命令都会返回一个退出状态码,成 ...
随机推荐
- 长短时记忆网络LSTM和条件随机场crf
LSTM 原理 CRF 原理 给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型.假设输出随机变量构成马尔科夫随机场(概率无向图模型)在标注问题应用中,简化成线性链条件随机场,对数线性判别 ...
- setting-url配置
参考: diango1 一. mvc和mvt模式 著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负 ...
- AtCoder Grand Contest 017D (AGC017D) Game on Tree 博弈
原文链接https://www.cnblogs.com/zhouzhendong/p/AGC017D.html 题目传送门 - AGC017D 题意 给定一棵 n 个节点的以节点 1 为根的树. 两个 ...
- excel怎么样批量将unix时间戳转化为北京时间
https://jingyan.baidu.com/article/63acb44afb1e2561fcc17e3f.html 1.单元格属性改变日期 2.使用公式: =(A2+8*3600)/864 ...
- CF552 E. Two Teams
题意:给出一串n个数 为1-n的乱序 一共有两个教练 教练一的队伍是1队 二是二队 教练一选择 当前队列中剩余人数的最大序号 将其和左边k个人 和右边k个人 变为一队 如此反复直到所有人 ...
- 数学建模:1.概述& 监督学习--回归分析模型
数学建模概述 监督学习-回归分析(线性回归) 监督学习-分类分析(KNN最邻近分类) 非监督学习-聚类(PCA主成分分析& K-means聚类) 随机算法-蒙特卡洛算法 1.回归分析 在统计学 ...
- Python3.4+Django1.9+Bootstrap3
实现和原理 Python集成Django开发框架后,可以通过在cmd命令提示符下建立工程,工程名为learn_models 1 django-admin.py startproject learn_m ...
- POJ 2289 Jamie's Contact Groups 【二分】+【多重匹配】(模板题)
<题目链接> 题目大意: 有n个人,每个人都有一个或者几个能够归属的分类,将这些人分类到他们能够归属的分类中后,使所含人数最多的分类值最小,求出该分类的所含人数值. 解题分析: 看到求最大 ...
- HDU 2289 Cup【二分】
<题目链接> 题目大意: 一个圆台型的杯子,它的上底半径和下底半径已经给出,并且给出它的高度,问你,体积为V的水倒入这个杯子中,高度为多少. 解题分析: 就是简单的二分答案,二分枚举杯中水 ...
- 上海市2019年公务员录用考试笔试合格人员笔试成绩(B类)
考试类别:B类 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 5101919 154.7 5113380 156.5 5126791 133.5 5146138 126.2 ...