bash编程及多命令

bash脚本编程:

编程?使用人类自然语言或机器语言进行程序源代码书写的过程

为什么要编程?为了能够让用户在使用计算机的时候,可以让计算机以非交互的方式完成某些任务;此时用户需要将此类任务编辑成为一个文件,并且让计算机按照特定书序进行任务读取,从而实现预期的功能

为了让计算机能够解读此类文件的内容并正确的予以执行,必须将程序源代码文件转换为计算机可以直接识别并使用的二进制格式,此转换过程称为编译;而想要完成编译过程,必须使用特定的编译器工具;因此,无论使用何种编译语言进行程序编写,都必须严格按照编译器所能够识别的特定格式和语法结构进行程序编写

编程语言:

高级语言:

根据源代码的处理方式分类:

编译型语言:

源代码-->编译器(编译)-->[链接器(链接)-->]汇编器(汇编)-->可以执行的二进制代码文件

解释型语言

源代码-->解释器(逐行解释)-->边解释边执行

根据编译过程中的功能实现是调用库还是调用外部程序文件分类:

完整编译语言:

利用库或编程组件进行编程

脚本编程语言:

利用解释器调用被选择的外部应用程序

根据程序的编写规范分类

过程式语言:

程序=指令+数据

以指令为中心,围绕指令的功能实现设计数据和数据结构,数据为指令服务

算法和指令的实现形式

顺序执行

选择执行

循环执行

面向对象语言:

程序=算法+数据结构

以数据和数据结构为中心,将数据实例化,围绕数据的需求来部署算法

类(class):被实例化的数据

属性(attribution):同一类中的不同对象的区分依据

方法(method):类的正确的操作方法

低级语言:

汇编语言

机器语言:

二进制代码

shell脚本编程-bash脚本编程:

过程式编程语言,解释运行的编程语言,脚本类语言(依靠外部应用程序文件运行)

shell脚本是什么?

纯文本文档-文件中所有存储或包含的指令+数据都是以字符为单位进行存储的

根据用户的需求解决用户问题的简单或复杂的命令组合体

是一种具有“执行幂等性”的程序实体

执行幂等性:任何命令的一次执行结果和多次执行结果是一致的

*注意:很多命令都不具备“执行幂等性”,因此在shell脚本中需要使用大量的程序逻辑来判断某个命令是否符合其运行条件,从而避免在运行过程中出现的严重错误

shell脚本中的代码内容如何书写?

1.首行必须是shebang,即解释器的程序的绝对路径,必须占据绝对行首且必须单独占据第一行,在执行脚本时,会根据shebang的指示,启动相应的解释器以解释脚本被诸多的命令

#!/bin/bash

#!/bin/sh

#!/usr/bin/python

...

2.在shell脚本中,除了shebang之外,所有行首为#字符的行,均被解释为注释行;即解释器只会解释其内容,但并不执行

3.解释器会忽略脚本文件中所有的空白行(在一行文本中,除了空白字符,空格字符,制表字符之外不具备其他任何类型字符的行)

4.大量的命令和关键字

命令:内部或外部应用程序

关键字:内置于shell只能在某种特定结构体中执行的命令;keyword

如:if,else,then,do,while,for,select

5.shell中的所有的特殊功能字符;

*注意:所有被编写进shell脚本命令、关键字及符号必须是ASCII编码格式的字符,其他编码格式的字符可以出现在shell脚本中,但不具有任何特殊含义

如何编写shell脚本?

可以利用所有的文本文档编辑工具进行shell脚本编写,如:nano,vi,vim,pico,emacs.....

通常在linux的各发行版本中,推荐使用vim

脚本文件的命名方式:

一般情况下,会为脚本设置“.sh”的名称后缀:较低版本的编辑工具,会根据文件的后缀名称来识别是否为shell脚本文件;较高版本的文本编辑工具,如vim7,无需过多的关系文件后缀名的问题

脚本的运行方式:

1.为脚本文件赋予执行权限,可以直接以绝对路径或相对路径的方式运行此文件;

# chmod +x /PATH/TO/SOME_SCRIPT_FILE

# /PATH/TO/SOME_SCRIPT_FILE

注意:如果脚本文件所在的目录路径存储于PATH变量中,则直接以脚本文件名来执行即可

2.直接使用解释器运行脚本,将脚本文件作为解释器程序的参数

# bash /PATH/TO/SOME_SCRIPT_FILE

bash命令的常用选项:

-x:使bash在解释脚本的过程展示在标准输出上:一般用于为shell脚本排错

-n:对脚本文件进行预执行,以分析脚本中是否存在语法类错误:如果没有错误,则不能输出任何信息;相反,则输出简洁的提示信息;具体的错误定位还需自行判断

注意:此种方式中,脚本文件是否有执行权限并不是很重要的属性

注意以上两种方式在执行脚本时,会在当前shell中开启一个新的子shell以运行脚本:一般情况下,当脚本运行结束,该子shell也会被随之销毁;因此,所有在脚本中定义的变量,在脚本的末尾处,最好将其明确的撤销 gc

3.使用source命令运行脚本:

# source /PATH/TO/SOME_SCRIPT_FILE

# . /PATH/TO/SOME_SCRIPT_FILE

注意:

1.source命令不会在运行脚本时开启子shell,而是

2.使用source命令执行的脚本中不要包括诸如exit类的命令

利用bash脚本程序实现算数运算

算数运算操作符:

常用的基本算数运算符:

+,-,*,/,%,**

增强型的算数运算符:

+=,-=,*=,/=,%=

特殊的增强型算数运算符:

++,--

算数运算方法:

1.$[expression]其中的表达式可以是纯数字组成的,也可以使用变量引用变量值:在使用变量时,可以将$符号省略

2.let VAR=EXPRESSION根据算数表达式完成算数运算并赋值给指定的变量

3.$((EXPRESSION))其中的表达式可以是纯数字组成的,也可以使用变量引用变量值:在使用变量时,可以将$符号省略

4.expr ARGU1 ARGU2 ARGU3

其中ARGU1和ARGU3必须是整数数值,ARGU2是算数运算符

5.echo “EXPRESSION” | bc

6.bc <<< EXPRESSION

文本处理工具:

全屏编辑器:VIM,nano

行编辑器:

文本处理三剑客:grep系,sed,awk

grep系:grep,egrep,fgrep    文本搜索工具,基于PATTERN(模式)

对于给定的文本文件进行模糊搜索,grep系所有命令默认工作于贪婪搜索模式

sed:Stream EDitor,流编辑器,文本编辑工具;

awk:文本格式化(把所有的内容按照特定的格式输出)工具,文件报告生成器,文件处理的编程语言

grep:Global search Regular Expression and Print out the line

利用正则表达式进行全局搜索并将匹配到的行显示出来

格式:

grep [options] PATTERN [FILE...]

grep [options] [-e PATTERN | -f FILE] [FILE...]

PATTERN:过滤匹配条件,是由没有特殊意义的文本字符或者是正则表达式元字符组成

正则表达式的元字符:会被正则表达式处理引擎解释为特殊含义的字符

pcre:正则表达式处理引擎,prel语言的正在表达式引擎

正则表达式的元字符:

基本的正则表达式元字符:BRE

字符匹配类:

.:匹配任意单个字符

[]:匹配任意指定范围内的单个字符

[^]:匹配任意指定范围内的单个字符

下列所有的字符集都可以放置于[]之中用于匹配字符集范围内的单个字符;

[:lower:]

[:upper:]

[:alpha:]

[:digit:]

[:xdigit:]

[:alnum:]

[:punct:]

[:space:]

[a-z]:仅表示所有的小写字母

[A-Z]:仅表示所有的大写字母

[0-9]:仅表示所有的十进制数码

次数匹配类:该类字符前面的一个字符可以出现的次数;

*:其前面的字符可以出现任意次,即:0次,一次或多次

\?:其前面的字符可有可无,即:0次或1次

\+:其前面的字符至少出现一次

\{m,n\}:其前面的字符至少出现m个,最多不超过n个

\{m\}:其前面的字符必须出现m次

\{m,\}:其前面的字符至少出现m次

\{,n\}:其前面的字符出现最多不超过n次

注意:在正则表达式中,表示任意长度的任意字符:.*

位置锚定字符:

行锚定:

行首锚定:^

行尾锚定:$

字锚定:

字首锚定:\<或\b

字尾锚定:\>或\b

分组与前向引用字符:

\(\):将小括号中包含的内容作为不可分割的整体来处理

\1,\2,\3,...:前向引用字符

正则表达式处理引擎的内置变量,\1表示前面所出现的第一组小括号中括选的内容:\2表示前面所出现的第二组小括号中括选的内容;...

或者:

\|:将其左右的字符或字符串当作整体对待;

“C\|cat” == C 或 cat

扩展的正则表达式元字符:ERE

基本的正则表达式元字符:BRE

字符匹配类:

.:匹配任意单个字符

[]:匹配任意指定范围内的单个字符

[^]:匹配任意指定范围内的单个字符

下列所有的字符集都可以放置于[]之中用于匹配字符集范围内的单个字符;

[:lower:]

[:upper:]

[:alpha:]

[:digit:]

[:xdigit:]

[:alnum:]

[:punct:]

[:space:]

[a-z]:仅表示所有的小写字母

[A-Z]:仅表示所有的大写字母

[0-9]:仅表示所有的十进制数码

次数匹配类:该类字符前面的一个字符可以出现的次数;

*:其前面的字符可以出现任意次,即:0次,一次或多次

?:其前面的字符可有可无,即:0次或1次

+:其前面的字符至少出现一次

{m,n}:其前面的字符至少出现m个,最多不超过n个

{m}:其前面的字符必须出现m次

{m,}:其前面的字符至少出现m次

{,n}:其前面的字符出现最多不超过n次

注意:在正则表达式中,表示任意长度的任意字符:.*

位置锚定字符:

行锚定:

行首锚定:^

行尾锚定:$

字锚定:

字首锚定:\<或\b

字尾锚定:\>或\b

分组与前向引用字符:

():将小括号中包含的内容作为不可分割的整体来处理

\1,\2,\3,...:前向引用字符

正则表达式处理引擎的内置变量,\1表示前面所出现的第一组小括号中括选的内容:\2表示前面所出现的第二组小括号中括选的内容;...

或者:

|:将其左右的字符或字符串当作整体对待;

“C|cat” C   cat”

grep系:

grep:仅支持基本正则表达式元字符

egrep:可以支持扩展正则表达式元字符

fgrep:不支持任何形式的正则表达式元字符,将所有的字符都视为没有任何特殊意义的普通文本字符

常用选项:

-A num:同时显示被PATTERN匹配到的行及其后续num行

-B num:打印出匹配的行之前的上文

-C num:打印出匹配的行的上下文前后各 NUM  行

--colour[=WHEN]:在匹配的行周围以指定的颜色来标记

-c, --count:不输出被PATTERN匹配的行的内容,而是以输出被PATTERN匹配到的行数

-E, --extended-regexp:可以使用grep命令支持扩展正则表达式元字符;相当于执行了egrep命令

-F, --fixed-strings:相当于fgrep

-e PATTERN, --regexp=PATTERN指定多个

-f FILE, --file=FILE

-i, --ignore-case

-o, --only-matching

-q, --quiet, --silent

-v, --invert-match:只选择不匹配的行

时间: 2024-11-13 09:41:46

bash编程及多命令的相关文章

bash编程快速入门

首先,我们简单的介绍一下bash,bash是GNU计划编写的Unixshell,它是许多Linux平台上的内定shell,它提供了用户与系统的很好的交互,对于系统运维人员,bash的地位是举足轻重的,bash编程能很快处理日常的任务 bash入门,一个最简单的bash例子 #vim hello.sh #!/bin/bash #This is the first example of the bash #echo "Hello world" 下面,我们就这个简单的bash 脚本来介绍一下

bash编程:Shell练习题

bash编程:练习题 1. 写一个脚本:如果某路径不存在,则将其创建为目录:否则显示其存在,并显示内容类型 #!/bin/bash # baseurl=/var/tmp/testdir if [ -e $baseurl ]; then echo "file is no exists." else mkdir -p $baseurl file $baseurl fi 2. 写一个脚本,完成如下功能:判断给定的两个数值,孰大孰小:给定数值的方法:脚本参数,命令交互 #!/bin/bash

Linux bash编程入门

一.bash编程入门 编程语言: 编译型语言:编译器  c,c++ 解释型语言:解释器 解释器可独立运行 变量:保持数据的载体,命令的内存空间 本地变量: 环境变量 局部变量: 位置参数变量:$1,$2..., 特殊变量: $0 当前脚本的名字 shell脚本:shebang #!/bin/bash         #解释此脚本的shell路径,内核调用对应的解释器来解释脚本 #Description: #Version: #Author: #License: #Datetime: 脚本文件,其

bash编程初体验之for

bash编程初体验之for for while until 概述 本文将介绍以for为代表的循环语句在shell 脚本中的应用,常见的循环语句有for, while, until,作为循环语句,顾名思义,它就是重复地做一件事,直到满足某一条件而退出:另外,还有两个循环控制语句continue与break来配合循环语句,以实现临时中断或跳出循环的功能:以下为for, while, until的知识点提炼: for, while, until 进入条件          for: 列表元素非空   

bash 编程 awk

awk提供了一个类编程环境,允许修改和重新组织文件中的数据        定义变量来保存数据        使用算术和字符串操作符来处理数据        使用结构化编程概念        提取数据文件中的数据并将它们按另一顺序提取数据元素重新放置,从而生成格式化报告 命令格式 awk options program file 选项 -F fs 指定分隔符 -f file 指定读取程序的文件名 -v var=vlaue 定义程序中的一个变量及其默认值 -mf n 要处理的数据文件中的最大字段数

bash 编程 sed

sed编辑器                 流编辑器 可以基于输入到命令行的或是存储在命令文件中的命令来处理数据流中的数据,它每次从输入中读取一行,用提供的编辑命令匹配数据,按命令中指定的方式修改流中的数据,然后将生成的数据输出到STDOUT.默认所有来着STDIN的数据,都会输出的屏幕上,-n 选项 只要经常sed处理的哪一行才会输出到STDOUT上. 命令格式 sed option script file 选项 -e script  执行多个命令 -f file        执行文件中的

15、自学——Linux的学习进度与任务【bash编程之条件判断】

bash编程之条件判断 bash编程之条件判断:判定后续操作的前提条件是否满足 1.条件判断的常用判断类型(bash内生的): 整数测试 字符测试 文件测试   2.echo $?(执行状态返回值): 0:正确 1-255:错误 布尔值: 真 假 3.逻辑运算: 与运算: 真 && 真 = 真(0) 真 && 假 = 假(非0) 假 && 真 = 假 假 && 假 = 假 或运算: 真 || 真 = 真(0) 真 || 假 = 真 假 ||

bash编程初体验(二)

bash编程初体验(二) read if case 概述 在本篇文章中,我们将介绍bash编程中有关if语句的简单用法,.如此,如果条件为真,if会执行一种指令,如果条件为假,if会选择执行另一种指令,这种执行就是所谓的选择结构,它能够改变命令的基本顺序流结构,以选择流的形式运行. 在有关if语句的论述中,我们还将介绍read命令,因为read命令可以方便地引入一个或多个变量,可以天然地与if语句结合:另外,除了if语句,还有一种常见的选择语句:case语句,其简单易用,高效简洁,是时的不二选择

linux下的bash编程简要学习

linux下的bash编程简要学习     1.bash是什么: linux运行时系统只会运行系统运行所需要的运行脚本即系统守护进程,一般根据用户自己需求设定和实现的服务需要手动启动,这种服务进程通常由bash启动,脚本中的命令通常被按照一定规则被bash读取视作参数,因此在脚本头部要申明运行的bash类型,bash命令分为内建命令及外部命令,外部命令通过PATH进行依次查找. bash读取命令后将其启动(fork)成为一个进程,依次启动服务     2.bash控制语句:         本地