shell编程

Shell 变量替换及测试

梦想与她 提交于 2020-02-27 12:39:25
声明: $ 后面跟linux可执行命令 一、变量替换 语法 说明 ${变量名#匹配规则} 从变量的 开头 进行规则匹配,将符合 最短 的数据删除 ${变量名##匹配规则} 从变量的 开头 进行规则匹配,将符合 最长 的数据删除 ${变量名%匹配规则} 从变量的 尾部 进行规则匹配,将符合 最短 的数据删除 ${变量名%%匹配规则} 从变量的 尾部 进行规则匹配,将符合 最长 的数据删除 ${变量名/旧字符串/新字符串} 变量内容包含旧字符串,则 第一个 旧字符串被新字符串取代 ${变量名//旧字符串/新字符串} 变量内容包含旧字符串,则 全部的 旧字符串被新字符串取代 例1 : 定义变量:$ var_1="I love you, Do you love me" 输出变量:$ echo $var_1 打印结果:I love you, Do you love me 测试1:从头匹配最短删除   $ var_11=${var_1#*ove} // * 表示匹配任意字符   $ echo $var_11   打印结果:you, Do you love me // 注意开头的空格被去掉了。 测试2: 从头匹配最长删除(贪婪模式)   $ var_12=${var_1##*ove} // * 表示匹配任意字符   $ echo $var_12   打印结果:me // 注意开头的空格被去掉了。

shell脚本编程学习(一)

佐手、 提交于 2020-02-27 03:04:48
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言,在后续的博客当中,我会陆续介绍shell脚本的使用。这里是开始篇。 一、shell脚本的基本构成简介: 1、shell脚本通常包含如下部分: 首行     第一行内容在脚本的首行左侧,表示脚本将要调用的shell解释器,内容如下: #!/bin/bash #!符号能够被内核识别成是一个脚本的开始,这一行必须位于脚本的首行,/bin/bash是bash程序的绝对路径,在这里表示后续的内容将通过bash程序解释执行。 注释     注释符号# 放在需注释内容的前面 内容     可执行内容和shell结构 Shell脚本的权限 一般情况下,默认创建的脚本是没有执行权限的。 没有权限不能执行,需要赋予可执行权限,例如给test.sh脚本赋可执行权限,可以使用以下语句。 chmod +x test.sh Shell脚本的执行 1,输入脚本的绝对路径或相对路径 /root/helloWorld.sh ./helloWorld.sh 2,bash或sh +脚本 bash /root/helloWorld.sh sh helloWorld.sh 注:当脚本没有x权限时,root和文件所有者通过该方式可以正常执行。 3,在脚本的路径前再加". " 或source

Shell脚本中的并发

谁都会走 提交于 2020-02-26 14:53:19
主要记录一下Shell脚本中的命令的并发和串行执行以及如何控制进程的数量。 默认的情况下,Shell脚本中的命令是串行执行的,必须等到前一条命令执行完后才执行接下来的命令,但是如果我有一大批的的命令需要执行,而且互相又没有影响的情况下(有影响的话就比较复杂了),那么就要使用命令的并发执行了。 看下面的代码: #!/bin/bash for (( i = 0 ; i < ${count} ; i ++ )) do commands1 done commands2 对于上面的代码,因为每个commands1都挺耗时的,所以打算使用并发编程,这样就可以节省大量时间了。 修改后的代码如下: #!/bin/bash for (( i = 0 ; i < ${count} ; i ++ )) do { commands1 } & done commands2 这样的话commands1就可以并行执行了。 实质是将commands1作为后台进程在执行,这样主进程就不用等待前面的命令执行完毕之后才开始执行接下来的命令。 但是我的本来目的是让commands1的这个循环都执行结束后,再用command2去处理前面的结果。如果像上面这样写的话,在commands1都还没结束时就已经开始执行commands2了,得到了错误的结果。 再次修改代码如下: #!/bin/bash for (( i = 0 ;

1.4.2 linux和高并发-shell编程-文本流及重定向

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-26 12:21:27
目录 1.写在前面 2.文本流&重定向 3.输出重定向 4.输入重定向 1.写在前面 我们上次简单提了一下bash,bash还有一些比较重要的内容,我们想放到后面讲管道知识的时候在再重点提及。这次呢先讲一下 文本流和重定向 的知识。我个人认为,脚本编程是非常重要的一个环节,是无法替代的,自动化一直以来是人们追求的梦想。 2.文本流&重定向 流和我们java中文件流差不多,有输入有输出。那么重定向是什么呢?web中有转发和重定向,和那个是一回事。 fd是文件描述符 , 可以实现重定向操作 。进到fd里面, 最后那个0表示服务端号,再连接一个xshell,就会变成1. 查进程号: 3.输出重定向 任何一个命令都有012这样一个标准输入输出方式,重定向是什么意思:重定向是人为的干预012这样一个输出位置。 比如:本来输出到控制台,现在重定向到一个文件中。 一个>表示覆盖原来的文件,>>表示不覆盖,继续再下面追加文件内容 。 正常输出输出到一个文件里面: 错误输出输出到一个文件里面: 正确的、错误的分开输出到各自的文件: 检索顺序是先检索是否有这个目录,然后输出是从左边到右边。所以下面这个显示是正常输出,因为先检测是否有目录,报错误输出,打印到文件。然后正常输出将其覆盖掉。 把错误输出和标准输出合并到一个文件:( &> 和 >& 这两种写法都可以 ) 请大家注意一下,1 2

信息安全系统设计基础第一周学习总结——20135308

雨燕双飞 提交于 2020-02-26 02:51:59
本周,我学习了Linux的历史与一些著名的开发者。 操作系统始于二十世纪 50 年代,当时有一个项目叫做" Multics ",它的技术在当时很创新,然而它的开发过程并不顺利,当时参加该项目的一个开发团体-贝尔实验室退出了这个项目后开发了他们自己的一个操作系统—— UNIX。 UNIX 最初免费发布并因此在大学里受到欢迎,但是后来变得商业化,价格高昂,使用的人很少。1991 年 10 月,Linus Torvalds在赫尔辛基大学接触 UNIX ,他希望能在自己的电脑上运行一个类似的操作系统。很快他就开始了自己的开发工作,他第一次发行的版本很快吸引了一些黑客,他们的加入使它很快就具有了许多吸引人的特性。他经常改写内核,使有些程序能更容易在 Linux 上运行,包括 C 编译器,都来自于自由软件基金 GNU 项目。 1992-1993 年,Linux 内核具备了挑战 UNIX 的所有本质特性,包括 TCP/IP 网络,图形界面系统(X window),Linux 同样也吸引了许多行业的关注。一些小的公司开发和发行Linux,有几十个 Linux 用户社区成立。1994 年,Linux 杂志也开始发行。 与Windows相比,Linux是免费的,平台更加安全,大都为开源自由软件,用户可以修改定制和再发布,但是部分软件质量和体验欠缺,但是可以定制,更具自由行,可学习性。

shell编程之文本小工具

北城余情 提交于 2020-02-26 01:22:42
一、文本处理工具 1、grep工具 2、cut工具 3、sort工具 4、uniq工具 5、tee工具 6、diff工具 7、paste工具 二、bash的特性 1、命令和文件自动补全 2 、常用的通配符 3、bash中的引号 一、文本处理工具 1. grep工具 grep是 ==行== 过滤工具;用于根据关键字进行行过滤 语法和选项 语法: # grep [选项] '关键字' 文件名 常见选项: OPTIONS: -i: 不区分大小写 -v: 查找不包含指定内容的行,反向选择 -w: 按单词搜索 -o: 打印匹配关键字 -c: 统计匹配到的行数 -n: 显示行号 -r: 逐层遍历目录查找 -A: 显示匹配行及后面多少行 -B: 显示匹配行及前面多少行 -C: 显示匹配行前后多少行 -l:只列出匹配的文件名 -L:列出不匹配的文件名 -e: 使用正则匹配 -E:使用扩展正则匹配 ^key:以关键字开头 key$:以关键字结尾 ^$:匹配空行 --color=auto :可以将找到的关键词部分加上颜色的显示 颜色显示(别名设置): 临时设置: # alias grep='grep --color=auto' //只针对当前终端和当前用户生效 永久设置: 1)全局(针对所有用户生效) vim /etc/bashrc alias grep='grep --color=auto'

Shell编程之sed工具

核能气质少年 提交于 2020-02-26 01:22:31
一、sed介绍 1.sed用来做啥? 2.sed如何处理文件? 二、sed使用方法介绍 1.命令行格式 1)语法格式 2)举例说明 2.脚本格式 1)用法 2)注意事项 3)举例说明 3.补充扩展总结 三、课堂练习 四、课后实战 一、sed介绍 1. sed用来做啥? sed是Stream Editor(流编辑器)的缩写,简称流编辑器;用来==处理文件==的。 2. sed如何处理文件? sed是==一行一行读取==文件内容并==按照要求==进行==处理==,把处理后的结果==输出到屏幕==。 首先sed读取文件中的一行内容,把其保存在一个==临时缓存区中==(也称为模式空间) 然后==根据需求==处理临时缓冲区中的行,完成后把该行==发送到屏幕上== 总结: 由于sed把每一行都存在临时缓冲区中,对这个 副本 进行编辑,所以==不会直接修改原文件== Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作,对文件进行过滤和转换操作 二、sed使用方法介绍 sed常见的语法格式有两种,一种叫==命令行==模式,另一种叫==脚本==模式。 1. 命令行格式 1)语法格式 sed [options] == ' ==处理动作 =='== 文件名 常用选项 选项 说明 备注 -e 进行多项(多次)编辑 ==-n== 取消默认输出 不自动打印模式空间 ==-r== 使用扩展==正则表达式

Shell编程之awk工具

风格不统一 提交于 2020-02-26 01:22:19
一、awk介绍 1.awk概述 2.awk能干啥? 二、awk使用方式 1.==命令行模式使用== 1)语法结构 2)常用选项介绍 3)=='==命名部分说明=='== 2.脚本模式使用 1)脚本编写 2)脚本执行 三、 awk内部相关变量 1、==常用内置变量举例== 2、内置变量分隔符举例 四、 awk工作原理 五、awk使用进阶 1.格式化输出print和printf 2.awk变量定义 3.awk中BEGIN...END使用 1)举例说明1 2)举例说明2 4.awk和正则的综合运用 1)举例说明 5.课堂练习 6.awk的脚本编程 1)流程控制语句 2)循环语句 7.awk算数运算 六、awk统计案例 1、统计系统中各种类型的shell 2、统计网站访问状态 3、统计访问网站的每个IP的数量 4、统计网站日志中PV量 一、awk介绍 1. awk概述 awk是一种==编程语言==,主要用于在linux/unix下对==文本和数据==进行处理,是linux/unix下的一个工具。数据可以来自标准输入、一个或多个文件,或其它命令的输出。 awk的处理文本和数据的方式: ==逐行扫描==文件 ,默认从第一行到最后一行,寻找匹配的==特定模式==的行,并在这些行上进行你想要的操作。 awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是Alfred Aho、Brian

Shell编程之case语句与函数

寵の児 提交于 2020-02-26 01:21:59
一、case语句 1.语法结构 2.应用案例 1)脚本传不同值做不同事 2)根据用户需求选择做事 二、函数 1.什么是函数? 2.如何定义函数? 3.函数如何调用? 1)当前命令行调用 2)定义到用户的环境变量中 3)脚本中调用 三、综合案例 1.任务背景 2.具体要求 3.综合分析 4.落地实现 四、正则表达式 1.正则表达式是什么? 2.正则能干什么? 3.正则当中名词解释 4.第一类正则表达式 1)正则中普通常用的元字符 2)正则中其他常用元字符 3)扩展类正则常用元字符 5.第二类正则 6.正则表达式总结 五、正则元字符一栏表 六、正则练习作业 1.文件准备 2.具体要求 七、课后作业 脚本搭建web服务 一、case语句 case语句为多重匹配语句 如果匹配成功,执行相匹配的命令 1. 语法结构 说明:pattern表示需要匹配的模式 case var in 定义变量;var代表是变量名 pattern 1) 模式1;用 | 分割多个模式,相当于or command1 需要执行的语句 ;; 两个分号代表命令结束 pattern 2) command2 ;; pattern 3) command3 ;; *) default,不满足以上模式,默认执行*)下面的语句 command4 ;; esac esac表示case语句结束 2. 应用案例 1)脚本传不同值做不同事

Shell编程之shell基础

∥☆過路亽.° 提交于 2020-02-26 01:21:16
一、shell介绍 1.编程语言分类 2.shell简介 3.shell脚本 1)什么是shell脚本? 2)什么时候用到脚本? 3)shell脚本能干啥? 4)shell脚本的基本写法 5)shell脚本的执行方法 二、变量的定义 1.变量是什么? 2.什么时候需要定义变量? 3.变量如何定义? 4.变量的定义规则 1)变量名区分大小写 2)变量名不能有特殊符号 3)变量名不能以数字开头 4)等号两边不能有任何空格 5)变量名尽量做到见名知意 5.变量的定义方式有哪些? 1)基本方式 2)命令执行结果赋值给变量 3)交互式定义变量(read) 4)定义有类型的变量(declare) 6.变量的分类 1)本地变量 2)环境变量 3)全局变量 4)系统变量 三、简单四则运算 1.四则运算符号 2.了解i++和++i 四、扩展补充 1.数组定义 1)数组分类 2)普通数组定义 3)数组的读取 4)关联数组定义 2.其他变量定义 一、shell介绍 前言: 计算机只能认识(识别)机器语言(0和1),如(11000000 这种)。但是,我们的程序猿们不能直接去写01这样的代码,所以,要想将程序猿所开发的代码在计算机上运行,就必须找"人"(工具)来==翻译成机器语言==,这个"人"(工具)就是我们常常所说的 ==编译器== 或者 ==解释器== 。 1. 编程语言分类 编译型语言: ​ =