shell脚本编程需要的知识

关于shell的预备知识

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁即用户界面。用户把指令传给shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

脚本第一行: #!/bin/bash。       #! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。

使用jobs可以查看当前shell中后台执行的任务。用fg可以调到前台执行。sleep命令就是休眠的意思,后面跟数字,单位为秒,常用语循环的shell脚本中。

通配符

在Bash下,同样可以使用星号*来匹配零个或多个字符,而用问号?匹配一个字符。

输入输出重定向

输入重定向用于改变命令的输入,输出重定向用于改变命令的输出。输出重定向更为常用,它经常用于将命令的结果输入到文件中,而不是显示在屏幕上。输入重定向的命令是<,输出重定向的命令是> (即覆盖式),另外还有错误重定向2>,以及追加/附加重定向>> (即附加式) 。

Linux下设置自定义变量规则

1. 设定变量的格式为”a=b”,等号两边不能有空格。

2. 变量名只能由英文字母、数字以及下划线组成,而且不能以数字开头。

3. 当变量内容带有特殊字符(如空格)时,需要加上单引号。 例如:myname=‘Ruming Li’

4. 当变量内容中本身带有单引号,这就需要用到双引号了。 例如:myvar=“Ruming’s”

5. 如果变量内容中需要用到其他命令运行结果则可以使用反引号。 例如:mywd=`pwd`

6. 当变量内容可以累加其他变量的内容时,需要加双引号。 例如:myname=“$LOGNAME”Ruming

单引号和双引号的区别:用双引号时不会取消掉里面出现的特殊字符的本身作用(如上面的$),而使用单引号时则里面的特殊字符全部失去它本身的作用。

Linux shell中的特殊符号

* :代表零个或多个字符或数字。它可以没有任何字符,也可以有多个字符,总之有或没有都能匹配出来。

? :只代表一个任意的字符。不管是数字还是字母,只要是一个都能匹配出来。

# :这个符号在Linux中表示注释说明的意思,即”#”后面的内容会被Linux忽略掉。

\ :脱意字符,将后面的特殊符号(例如”*”,”?”,"{"等)还原为普通字符。例如:test\*的结果为test*。

| :管道符,前面多次说过,它的作用在于将符号前面命令的结果交给符号后面的命令。这里提到的后面的命令,并不是所有的命令都可以的,一般针对文档操作的命令比较常用,例如cat, less, head, tail, grep, cut, sort, wc, uniq, tee, tr, split, sed, awk等等

$ :除了用于变量前面的标识符外, ‘!$’表示上条命令中最后一个变量(或最后出现的那个事物)。例如命令ls test.txt的最后是test.txt,那么在当前命令下键入!$则代表test.txt。

$$ : 可以用作变量前面的标识符,还可以和!结合使用。

; :分号。平时我们都是在一行中键入一个命令,然后回车就运行了。如果想在一行中运行两个或两个以上的命令时,则需要在命令之间加一个分号”;”。

~ :用户的家目录(亦称主目录、登录目录或用户目录)。如果是root用户,则是 /root ;普通用户则是 /home/username。

& :如果想把一条命令放到后台执行(屏幕不显示执行情况和结果)的话,则需要加上这个符号。通常用于命令运行时间非常长的情况。

[ ] :中括号。中间为字符组合,代表中间字符中的任意一个。如 [0-9a-zA-Z] 中任一个。

正则表达式(Regular Expression)     是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。

在正则表达式中

”^”表示行的开始    ”$”表示行的结尾    那么空行则表示”^$”,如果你只想筛选出非空行,则可以使用 “grep -v ‘^$’ filename” 得到你想要的结果(-v取反)。

‘|’表示”或者”的意思

“.”表示任意一个字符。

‘?’表示一个前面的字符

‘+’表示一个或多个前面的字符

‘*’表示零个或多个前面的字符 ‘.*’表示零个或多个任意字符,空行也包含在内。

(空格) 表示参数分隔符

cmd 表示命令替换

( )小括号,分组,用以表示一个整体,例如(oo)+就表示1个’oo’或者多个’oo’。

{ }花括号,其内部为数字,表示前面的字符要重复的次数。 注意,{ }左右都需要加上脱意字符\。具体格式是 ‘\{n1,n2\}’其中n1<n2,表示重复n1到n2次前面的字符,n2还可以为空,则表示大于等于n1次。

grep、sed、awk

grep 工具的功能其实还不够强大,它实现的只是查找功能,而它却不能实现把查找的内容替换掉。

如果用vim的时候,可以查找也可以替换,但是只局限于在文本内部来操作,而不能输出到屏幕上。

sed工具以及下面要讲的awk工具就能实现把替换的文本输出到屏幕上的功能了,而且还有其它更丰富的功能。sed和awk都是流式编辑器,是针对文档的行来操作的。

sed

sed命令格式如下:

    sed  参数  功能选项  文件名或其他标准输入

sed参数如下:

    -i  修改文件内容

    -n  取消默认输出

sed功能选项如下:

    a  追加内容到指定行后

    i  插入内容到指定行前

    d  删除指定行

    c  用新行替换旧行(不常用)

    s  对每一行第一次匹配到的内容进行替换,配合标志g可以将一行中所有匹配到的内容进行替换

    p  输出指定内容,默认会输出2次匹配到的内容

打印某行的句法: sed -n ‘n’p filename 单引号内的n是一个数字,表示第几行,’p’字符表示打印。

前面grep中使用的特殊字符,如’^’, ‘$’, ‘.’, ‘*’等同样也能在sed中使用。

替换字符或字符串

awk

awk比sed更加强大,它能做到sed能做到的,也能做到sed不能做到的。

head –n2 test.txt | awk –F’:’ ‘{print $1}’ 截取文档中的某个段。

注:-F 选项的作用是指定分隔符,如果不加-F指定,则以空格或者tab为分隔符。Print为打印的动作,用来打印出某个字段。$1为第一个字段,$2为第二个字段,依次类推,有一个特殊的那就是$0,它表示整行。

注意awk的格式,-F后紧跟单引号,然后里面为分隔符,print的动作要用’{ }’括起来,否则会报错。print还可以打印自定义的内容,但是自定义的内容要用双引号括起来。

awk的内置变量

常用的变量有:

NF :用分隔符分隔后一共有多少段;

NR :行数,第几行。

原文地址:https://www.cnblogs.com/bfcs/p/10709956.html

时间: 2024-10-10 03:02:14

shell脚本编程需要的知识的相关文章

Bash Shell脚本编程-基础特性知识

Bash Shell的基础特性: 命令历史: history:shell内建命令 环境变量HISTFILE定义用户退出命令历史列表的存储位置 #echo $HISTFILE /root/.bash_history # echo $HISTFILESIZE   HISTFILE指向的文件持久留存的历史命令条目 1000 # echo $HISTSIZE           当前bash进程所留存的历史命令条目数 1000 # history -d 123            删除历史列表中的第1

BeagleBone Black板第五课:Shell脚本编程实验

BBB板第五课:Shell脚本编程实验 在一上课我们通过简单的echo命令测试并控制GPIO端口的高低电平输出,实现对一个LED指示灯的点亮和关闭控制,本节将通过Shell脚本编程,来完成两个LED指示灯的交替闪亮的实验. 实验器材:准备两个二极管指示灯,面包板等 使用GPIO端口P8.12和P8.11两个引脚 我们暂时不借助其他工具软件,直接远程登陆到BBB板的图形桌面,使用内置的Ledfpad编辑器来完成Shell脚本的编程. 远程登陆BBB板图形桌面还记得吧,不记得话参考前面的课程,这里就

Shell脚本编程具体解释

第12章 Shell脚本编程   l  Shell命令行的执行 l  编写.改动权限和运行Shell程序的步骤 l  在Shell程序中使用參数和变量 l  表达式比較.循环结构语句和条件结构语句 l  在Shell程序中使用函数和调用其它Shell程序 12-1   Shell命令行书写规则 u  Shell命令行的书写规则 对Shell命令行基本功能的理解有助于编写更好的Shell程序,在执行Shell命令时多个命令能够在一个命令行上执行,但此时要使用分号(:)分隔命令,比如: [[emai

Bash Shell脚本编程笔记总结(二)

本文接上一部分:Bash Shell脚本编程笔记总结(一) 数组: 连续的多个独立内存空间,每个内存空间相当于一个变量 数组元素:数组名+索引 索引:从0开始编号 声明数组: declare -a ARRAR_NAME 关联数组: declare -A ARRAY_NAME 支持稀疏格式: 数组元素的赋值: (1) 一次只赋值一个元素 ARRAY[index]=VALUE a[0]="hello" (2) 一次赋值全部元素 ARRAY=("mon" "tu

shell脚本编程之选择控制结构

程序开发语言,分为两种,一种是解释型语言,一种是编译型语言.解释型语言是解释语句,并且能根据流程控制机制让语句按需执行,解释一条语句就返回语句的结果,这种语言需要一个解释器,而linux中的bash就是这样的一个解释器,常见的解释型语言有perl,python,ruby,bash.编译型语言,首先需要编译源程序,并且能够将源程序转换为二进制格式,而后让其执行,这种语言需要一个编辑器,如linux下的gcc就是一个编辑器,编译型语言有C,C++,C#等.无论是解释型语言还是编译型语言,都有语言控制

shell脚本编程之循环控制结

shell脚本编程之循环控制结构 循环控制之for循环 语法结构1 for  Variable  in List do commands done 语法结构2 for  Variable  in List:do commands done 这个List可以为列表.变量.命令 等等 for循环    事先提供一个元素列表,而后,使用变量去遍历此元素列表,每访问一个元素,就执行一次循环体,直到元素访问完毕 1.for循环中的List为列表 eg1:   显示/etc/inittab, /etc/rc

SHELL脚本编程进阶(二)

写在前面(最重要) 本文部分资料和示例援引自以下书籍.在此,感谢原作者的创作,以及所有译者的付出,向他们致敬. Advanced Bash-Scripting Guide <高级Bash脚本编程指南>Revision 10中文版 Linux脚本编程执导 其中 <高级Bash脚本编程指南>Revision 10中文版 是 <Advanced Bash-Scripting Guide> 的中文翻译版,文档翻译正在进行中,再次感谢译者付出. 前言 在之前的文章 Linux 基

SHELL脚本编程进阶(一)

写在前面(最重要) 本文部分资料和示例援引自以下书籍.在此,感谢原作者的创作,以及所有译者的付出,向他们致敬. Advanced Bash-Scripting Guide <高级Bash脚本编程指南>Revision 10中文版 Linux脚本编程执导 其中 <高级Bash脚本编程指南>Revision 10中文版 是 <Advanced Bash-Scripting Guide> 的中文翻译版,文档翻译正在进行中,再次感谢译者付出. 前言 在之前的文章中,我们已经详细

shell脚本编程学习笔记(1)

在linux上编程,离不开shell,计划好好看看shell编程,并在这里做些笔记以供有相同兴趣的人分享,主要参考<shell脚本学习指南>. 学习shell脚本编程之前,需要了解脚本编程语言和编译型语言的概念. 一般很多中型.大型的程序是用编译型语言写成的,比如C.C++.Java等.这类程序从源代码编译成目标代码,直接通过计算机执行.编译型语言执行效率比较高,大多运作于底层,处理的是字节.整数.浮点数等机器层级的对象,因此实现一个具体的功能,比如"将一个目录里的所有文件复制到另外