Bash的基础特性
提供了编程环境
程序:指令+数据
程序编程风格
过程式:以指令为中心,数据服务于指令
对象式:以数据为中心,指令服务于数据
Shell程序:提供了编程能力,解释执行
程序的执行方式
计算机:运行2进制指令
编程语言:
低级:汇编
高级:
编译:高级语言—》编译器—》目标代码
C/C++ java
解释:高级语言—》解释器——》机器代码
Shell,python,per1
过程式编程语言:
顺序执行
循环执行
选择执行
Shell编程:过程式、解释执行
编程语言的基本结构
数据存储:变量,数组
表达式
语句
-Shell脚本十分依赖当前系统运行的环境
Shell脚本:文本文件
第一行写清执行的bash
#!/bin/bash
#!/usr/bin/python
……
shebang机制:解释执行从第一行得知
Magic number:魔术,(标识作用)
脚本:
vim *.sh
#!/bin/bash
Cat /etc/fstab
Wc –l /etc/fstab
保存
执行./*.sh
即使不给权限也是可以执行的,只要第一行的的bash有执行权限就可以
ls –l /bin/bash(查看权限)
运行脚本:
1、 给予执行权限:通过具体的文件路径指定的文件执行
2、 直接运行解释器,将脚本作为解释器程序的参数运行
变量:
命名的内存空间:
数据的存储方式
字符:定义字符编码集, 列子:110需要24bit,每一个字符需要8bit
数值:110需要8bit
整型
浮点型
变量:变量类型
作用:
1、 数据存储格式
2、 能参与运算
3、 表示的数据范围
类型:
字符:
数值:
整型
浮点型
布尔型(特殊型)
编程程序语言:
强类型:C
弱类型:bash shell;
把所有要存储的数据统统当做字符串运行
bash shell不支持浮点数:
逻辑运算:
true真1,false假0
与:
1&&1=1
1&&0=0
0&&0=0
或:
1||1=1
1||0=1
0||0=0
非:
数为真值为假
!1=0
!0=1
异或:相同为假
短路运算:
与:&&
第一个为零,结果必定为0
第一个为1,第二个必须参与运算
或:||
第一个为1,结果一定为1
第一个为0,第二个必须参与运算
在linux命令里,&&在第一个命令执行成功,第二个才执行,||第一个成功,第二个不会执行,第一个失败,第二个才执行
Grep:(文本处理编辑器:grep sed awk)
Linux上文本处理
Grep:文本过滤(基于模式:pattern)工具
Grep,egrep,fgrep
Sed:stream editor 行编译器,文本编译器
Awk:linux上实现gawk,文本报告生成器
Grep:global search REgular expression and print out the line
作用:文本搜索工具,根据用户指定的”模式”对目标文本逐行进行匹配检查,打印匹配到的行
模式:由正则表达式字符及文本字符所填写的过滤条件:称之为模式
REGEXP:由以为特殊字符及文本字符所填写的模式,其中有些字符不表示字面意义,而标识控制或通配的功能
元字符
分两类:
基本的正则表达式:BRE(grep只支持)
扩展的正则表达式:ERE(egrep或用grep -E)
正则表达式引擎:
grep [OPTIONS] PATTERN [FILE...]
grep 字符串 文件
选项:
--color=auto对匹配到的文本加颜色(6需要,7不需要)
Fgrep 快速grep
-v 反向选择,仅显示不匹配到的行
-i 匹配忽略大小写
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # :显示匹配到的行和后N行
-B # :显示匹配到的行和前N行
-C # :A+B 前几行+后几行
-E 使用扩展的正则表达式
基本的正则表达式元字符:
字符匹配:
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[:digit:]、所有数字
[:lower:]、所有的小写字符
[:upper:]、所有的大写字符
[:alpha:]、所有的字符大小写
[:alnum:]、所有数字字母
[:punct:]、所有的标点符号
[:space:]、空白字符
使用时需要继续加中括号
字符要用引号
单引号弱引用,双引号强引用
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数,
*,匹配前面的字符出现的任意字数,能匹配多少就匹配多少(例x*y,y前面出现任意次x,包括0次,)
能匹配多少次就匹配多少次
.* :任意长度的任意字符
\?:匹配其前面的字符0或1次,即前面的字符可有可无
\+ :匹配前面的字符至少1次
\{m\}:匹配前面的字符m次,指定次数
\{m,n\}前面的字符出现的次数至少m次,最多n次
\{m,\}匹配至少m次,最多不限
\{0,n\}:匹配的字符最少0次,最多n次
位置锚定:
^:出现在行首,用于模式最左侧
例子:^root root出现在行首
$:行位锚定:用于模式最右侧
^PATTERN$:用于模式匹配整行
^$:空行,
^[[:space:]]*$ 含有空格的空行(空格也占字符)
\< 或 \b:词首锚定:用于单词模式的左侧,出现在单词的词首
\> 或 \b:词尾锚定:用于单词模式的右侧,出现在单词的词尾
\<单词\>:匹配整个单词
分组:
\(\):将一个或多个字符捆绑在一起:当做一个整体进行处理
例子:\(xy\)*ab,ab前xy出现n次
note:分组括号中的模式匹配到的内容会被正则表达式引擎记录与内部的变量中,这些变量命名为\1 \2 \3
\1:从左侧起,第一个左括号一级与之匹配有括号之间的模式所匹配到的任意字符
\(ab\+\(xy\)*\)
/1引用是,使用的是整个
/2引用是: \(xy\)
/3引用是再次往里面的小括号
.......
后向引用:引用前面的分组括号中的模式所匹配到的字符(而非模式本身)