linux du -sh 脚本,Linux之shell脚本(2)

Linux之shell脚本(2)

一、printf命令:

printf是一个把从标准输入的字符按照你所要求的格式输出到标准输出即屏幕的命令.在很多时候,我们可能需要将自己的数据给他格式化输出的。

1.格式化输出。(print  format)

2.命令格式:printf'打印格式'实际内容

3.打印格式:

1)\a(警告声音输出)

03d44a9620cd34cfdc1a53e65792bd78.png

2)\b(退格键)

4bce885f0ead9709c10cbabdf2d07098.png

3)\f(清除屏幕,类似换纸)

f0a1273f68466fc93e2f743218852da3.png

4)\n(输出新的一行)

e1b834a94afdc79b16c190901e121f64.png

5)\r(帧处于行的开始,即enter键)

7e01fe6a18a939c066e69bca0bc3d409.png

6)\t(水平的table键)

6759d88bba8a2d1b1a53b81f055c0243.png

7)\v(垂直的table键)

6b1a354d1c24132b8a9efa1efcaa3032.png

8)\xNN(x为ASCII码十六进制表示;NN为俩位数数字;可转换数字成为字符)

f80a7f89dc97d817e632064e910a5617.png

9)%ns(n为数字;s代表string,即多少个字符)

81c9fba72481d712a2cb0fbe4c0c454c.png

10)%ni(n为数字;i代表integer,即多少整数字符)

20363a2487941b590fe10f6cb293c9e2.png

11)%N.nf(n、N为数字;f代表floating浮点,小数字数即小数点)

6a5603082f4ff8200d7e2a1449c62bbc.png

案例:

1)以整数形式输出23并换行,以字符串形式输出hello并换行

d0c016626553ba859c72a0b0914828b3.png

2)以2位整数形式输出23并换行,以7位字符串形式输出hello并换行

fe557c2d95541995b47ca88046abc6f5.png

案例文本:

考试分数的输出:假设有一个文件test.txt记录着考试分数,内容如下图所示:

dad8fe5ef22d4df2776d1143a53fb7eb.png

3)如下图所示,printf命令的输出结果并没有对齐,%s代表一个不固定长度的字符串,而字符串与字符串中间就以\t这个[tab]分隔符来处理。既然每个字段的长度不固定会造成上述的困扰,那我将每个字段固定就好啦。

517d1139c264d330cbe2793d83706a58.png

将test.txt文件中的内容,分别以字符串、整数、小数点来显示:

2f6c0485344c47af146ffa5f81334840.png

上面的格式共分为五个字段,%10s代表的是一个长度为10个字符的字符串字段,%5i代表的是长度为5个字符的数字字段,至于那个%8.2f则代表长度为8个字符的具有小数点的字段,其中小数点有两个字符宽度;全部的宽度仅有8个字符,整数部分占有5个字符,小数点本身(.)占一位,小数点后的位数则有两位。

二、awk命令:

awk也是一个数据处理工具!相较于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个字段来处理。

.awk语言的最基本功能是在文件或字符串中基于指定规则来分解抽取信息,也可以基于指定的规则来输出数据。

有三种方式调用awk

1)命令行方式

awk   [-F  field-separator]  'commands'input-files

其中,[-F域分隔符]是可选的,因为awk使用空格或tab键作为缺省的域分隔符,因此如果要浏览域间有空格的文本,不必指定这个选项,如果要浏览诸如passwd文件,此文件各域以冒号作为分隔符,则必须指明-F选项,如:awk -F: 'commands' input-file。

注:在linux系统中用环境变量IFS存储分隔符,但根据实际应用也可以改变IFS的值.

例如:查看默认分隔符。

c03fe8b660f937c5b444840102e64822.png

注意:oldIFS=$IFS(把环境变量IFS存到oldIFS)

78b58985e75b11d59b231fc86972fbfc.png

IFS=","(定义分隔符为,)

2)shel脚本方式

将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,以便通过键入脚本名称来调用。

相当于shell脚本首行的:#!/bin/sh可以换成:#!/bin/awk

16eb6a0a3099ce7a12b91ef0266e54bb.png

3)将所有的awk命令插入一个单独文件,然后调用:

Awk-fawk-script-fileinput-files

其中,-f选项加载awk-script-file中的awk脚本,input-files跟上面的是一样的。

awk的模式和动作

任何awk语句都由模式和动作组成(awk_pattern { actions })。在一个awk脚本中可能有许多语句。

模式部分决定动作语句何时触发及触发事件。处理即对数据进行的操作。如果省略模式部分,动作将时刻保持执行状态。即省略时不对输入记录进行匹配比较就执行相应的actions。

模式可以是任何条件语句或正则表达式等。awk_pattern可以是以下几种类型:

①正则表达式(/regexp/)

2698d02797141eef1917ec9245d79065.png

②布尔表达式用作awk_pattern,表达式成立时,触发相应的actions执行。

(1)表达式中可以使用变量(如字段变量$1,$2等)和/regexp/

(2)布尔表达式中的操作符:

关系操作符:< > <= >= == !=匹配操作符: value ~ /regexp/ 如果value匹配/regexp/,则返回真value !~ /regexp/ 如果value不匹配/regexp/,则返回真

(3)&&(与)和||(或)可以连接两个/regexp/或者布尔表达式,构成混合表达式。!(非)可以用于布尔表达式或者/regexp/之前。

例如:提取test.txt中chinese大于75为优秀。

cb85fd5ba1a34f83c29d9f5064e98a9e.png

例如:提取passwd中匹配d开头的显示ok。

6ed7f037e639dcc04510e70260ae8ac7.png

例如:模式包括两个特殊字段BEGIN和END。使用BEGIN语句设置计数和打印头。BEGIN语句使用在任何文本浏览动作之前,之后文本浏览动作依据输入文本开始执行。END语句用来在awk完成文本浏览动作后打印输出文本总数和结尾状态标志。

c33a57a664c9cf54c8a4ec665887e467.png

动作:

实际动作在大括号{}内指明。动作大多数用来打印,但是还有些更长的代码诸如i f和循环语句及循环退出结构。如果不指明采取动作,awk将打印出所有浏览出来的记录。

awk执行时,其浏览域标记为$1,$2...$n。这种方法称为域标识。使用这些域标识将更容易对域进行进一步处理。

使用$1 , $3表示参照第1和第3域,注意这里用逗号做域分隔。如果希望打印一个有5个域的记录的所有域,不必指明$1 , $2 , $3 , $4 , $5,可使用$0,意即所有域。为打印一个域或所有域,使用print命令。这是一个awk动作

awk的运行过程:

①如果BEGIN 区块存在,awk执行它指定的actions。

②awk从输入文件中读取一行,称为一条输入记录。(如果输入文件省略,将从标准输入读取)

③awk将读入的记录分割成字段,将第1个字段放入变量$1中,第2个字段放入$2,以此类推。$0表示整条记录。

④把当前输入记录依次与每一个awk_cmd中awk_pattern比较,看是否匹配,如果相匹配,就执行对应的actions。如果不匹配,就跳过对应的actions,直到比较完所有的awk_cmd。

⑤当一条输入记录比较了所有的awk_cmd后,awk读取输入的下一行,继续重复步骤③和④,这个过程一直持续,直到awk读取到文件尾。

⑥当awk读完所有的输入行后,如果存在END,就执行相应的actions。

awk入门实例:

例1:显示/etc/passwd文件中用户名和登录shell

e293b91b6c8fa5b5f2d23637712b3a5f.png

例2:显示/etc/passwd文件中用户名和登录shell,中间以tab分隔

4b05d0b90f6ed020650344f3ba60292c.png

例3:显示/etc/passwd文件中用户名和登录shell,中间以逗号分隔

1aa6ee6552e1f706ae38ed340786f2fd.png

例4:显示/etc/passwd文件中UID大于500的所有用户的用户名和登录shell

03546c001700595eb2b31a97ab7bd36c.png

例5:显示/etc/passwd文件中的UID大于500的用户名和登录shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"。

aa6dd0e6801c0c9eaf21bc2a7da6b7b8.png

注意:

1.awk后面接两个单引号并加上大括号{}来设定想要对数据进行的处理动作

2.awk工作流程是这样的:先执行BEGING,然后读取文件,读入有\n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。

六、函数及脚本的综合应用

1、shell函数:shell允许将一组命令集或语句形成一个可用块,这些块称为shell函数。

函数由两部分组成:函数标题、函数体。

标题是函数名。函数体是函数内的命令集合。

标题名应该唯一;如果不是,将会混淆结果,因为脚本在查看调用脚本前将首先搜索函数调用相应的shell。

2、定义函数的格式为:

函数名(){

命令1

...

}

如果愿意,可在函数名前加上关键字function,这取决于使用者。

function函数名()

{

命令1

...

}

例如:

3d92a38d6b7bbabcb524632443637bcf.png

脚本案例:

案例一、删除文件中的空行:

这个脚本(脚本名为del.lines)可以处理一个或多个文件。每个文件在用sed删除空行之前要先核实是否存在。

sed的输出被导入一个文件名中含有$ $的临时文件,最后这个临时文件又被移回到原来的文件中。

该脚本使用shift命令取得所有的文件名,用while循环逐个处理所有的文件,直至处理完

为止。可以使用del.lines --help获得一个简短的帮助

b012ec178b4322ca6d612b7397bab977.png

chmod  +x  del.lines,增加执行权限,

测试如下:

a07098f4659ac0e8ec6e203e502a9333.png

注:

1、basename命令能够从路径中分离出文件名。通常用于shell脚本中

2、shift语句用于迁移位置变量,将 $1~$9 依次向左传递

例如,若当前脚本程序获得的位置变量如下:

$1=file1、$2=file2、$3=file3、$4=file4

则执行一次shift命令后,各位置变量为:

$1=file2、$2=file3、$3=file4

再次执行shift命令后,各位置变量为:

$1=file3、$2=file4

案例二、日志文件超过长度,备份,清除内容:

437d633cb21d0dff2fdfb778c88eba34.png

脚本内容

cada279335c99e02b5ebb18a708e151b.png

注:du 并不是显示文件的实际大小,而是显示文件所占用的block大小,默认linux系统分区的block size是4k,也就是说即使文件只有1个字节,也会占用4k.ls -l则是文件的实际大小。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503803.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

import oracle utility_教你如何Oracle数据导入

学习Oracle时&#xff0c;你可能会遇到Oracle数据导入问题&#xff0c;这里将介绍Oracle数据导入问题的解决方法&#xff0c;在这里拿出来和大家分享一下。Oracle数据导入实用程序(Import utility)允许从数据库提取数据&#xff0c;并且将数据写入操作系统文件。imp使用的基本格…

linux 管道非阻塞,linux – 管道上的非阻塞读取

可以在管道上进行非阻塞I / O吗&#xff1f; fcntl无法设置O_NONBLOCK. Linux编程接口的页面918包括一个表’从管道读取n个字节或FIFO(p)’的语义.此表列出了管道和FIFO的行为,其中一列标题为O_NONBLOCK已启用&#xff1f;这意味着您可以在管道上设置O_NONBLOCK标志.它是否正确…

python异常值删除_python数据清洗中,是如何识别和处理异常值的?

异常值处理是pythonshujuqingxi/ stylecolor:#000;font-size:14px;>python数据清洗中重要的步骤&#xff0c;虽然异常值出现频率比较低&#xff0c;但是如果置之不理的话&#xff0c;还是会对实际项目的分析造成偏差&#xff0c;所以今天小编就跟大家分享pythonshujuqingxi/…

react 子传参父_react子父传参有几种方法?

react子父传参有几种方法&#xff1f;下面本篇文章给大家介绍一下react父子组件传参(值)的方法。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对大家有所帮助。react父子组件传参(值)的几种方法一、父组件传给子组件父组件通过props传递给子组件&…

啊哈c语言答案1.3,啊哈C语言编程-第2课-让计算机开口说话

为什么会有计算机的出现呢&#xff1f;我们伟大的人类&#xff0c;发明的每一样东西都是为了帮助我们改善生活。计算机同样是用来帮助我们的工具。想一想&#xff0c;假如你现在希望让计算机帮助你做一件事情&#xff0c;你首先需要做什么&#xff1f;是不是要先与计算机进行沟…

python c java_简单明了看懂JAVA,Python和C+的优劣势

Java由于其优越的跨平台可移植性&#xff0c;在Web开发中是主流语言。在加上手机Android系统的发展&#xff0c;使得java开发人员的需求量很大。同时&#xff0c;Java现在也用来开发手游。Java 的语法相对规范。 Python是动态形的灵活的解释性语言&#xff0c;从软件开发到Web开…

c语言源程序文件.c如何保存,急求如何将下列C语言程序数据存储到文件中?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼求如何改动才能将下列程序的存储输入或输出数据(或两者一起)到指定的文件(或运行时直接创立一个文件)如Arrangement中。#include int n0;int rest[7][7]; //全局声明,以供全局调用int main(){void perm(int list[],int ,int );int …

ultraos win10启动盘_UltraISO制作U盘启动安装MSDN原版Win10系统教程 - SDN系统库

UltraISO制作U盘启动安装Win10系统本教程是介绍使用UltraISO(软碟通)制作U盘启动来安装Win10系统&#xff0c;适用于当原系统损坏、崩溃、升级异常导致系统不能开机时重装&#xff0c;相对比《制作U盘PE启动盘方法》更快&#xff0c;且不需要借助任何第三PE/还原工具&#xff0…

python3.6字典有序_为什么Python 3.6以后字典有序并且效率更高?

在Python 3.5&#xff08;含&#xff09;以前&#xff0c;字典是不能保证顺序的&#xff0c;键值对A先插入字典&#xff0c;键值对B后插入字典&#xff0c;但是当你打印字典的Keys列表时&#xff0c;你会发现B可能在A的前面。 但是从Python 3.6开始&#xff0c;字典是变成有顺序…

linux 依赖关系解析失败,关于linux依赖关系出错的解决

我在装caffe时遇到的错误如下&#xff1a;apt-get: 代码:sudo apt-get install libgl1-mesa-dev正在读取软件包列表... 完成正在分析软件包的依赖关系树正在读取状态信息... 完成有一些软件包无法被安装。如果您用的是 unstable 发行版&#xff0c;这也许是因为系统无法达到您要…

以前是传xml的吗_明明不太合适但是还是被用在配置文件和数据传输上的XML

XML概述&#xff1a;概念&#xff1a;可扩展的标记语言。功能&#xff1a;作为数据本地存储的格式。(已淘汰)作为结构化存储的方式&#xff0c;不如数据库效率高。目前一部分移动设备中还在使用。作为网络中传输数据的格式。(已淘汰)作为网络传输的格式&#xff0c;在目前以移动…

用html5做一个简单网页_用新款ws2812灯带做一个简单的窗花

本文转自&#xff1a;DF创客社区-未经许可不可转载原文链接&#xff08;附件请于原文下方下载&#xff09;&#xff1a;用新款ws2812灯带做一个简单的窗花-创意生活论坛-DF创客社区​mc.dfrobot.com.cn作者&#xff1a;屌丝王小明很高兴提前拿到了DF即将上架的新品——ws2812灯…

c语言锁屏密码程序,求一个VB锁屏程序的源文件

满意答案nan67182014.07.08采纳率&#xff1a;53% 等级&#xff1a;12已帮助&#xff1a;8369人我原来写的一个缩屏的程序&#xff0c;后来没用&#xff0c;当时只是为了测试透明窗体的.代码给你参考下。功能差一个禁用任务管理器的功能Private Declare Function GetWindowL…

抗侧力构件弹性位移如何计算_说一说现在很火的装配式建筑怎么计算?

装配整体式剪力墙结构体系&#xff0c;其主要预制构件包括承重墙(预制剪力墙)、非承重墙(外填充墙、内隔墙等)、预制楼梯(预制楼梯梯段&#xff0c;端部伸出连接钢筋&#xff0c;伸入叠合平台板&#xff0c;通过叠合现浇形成整体楼梯)、预制阳台板(根据建筑要求&#xff0c;整体…

微软私有云解决方案_微软发布电信云平台 ,互联网巨头争夺5G网络商机

微软发布电信云平台 &#xff0c;互联网巨头争夺5G网络商机微软公司周一发布了全新的云平台&#xff0c;能够帮助电信运营商更快地构建5G网络&#xff0c;降低成本并向企业客户出售定制服务。这一5G的新平台将在微软云Azure上运行&#xff0c;微软表示使用该平台将降低基础架构…

用c语言编程参赛信息查询,确定参赛者名单(C语言实现)

/*2011第二届国信蓝点杯全国软件专业人才设计与开发大赛2011第二届国信蓝点杯全国软件专业人才设计与开发大赛选拔赛试题-Java语言高职组最后一题题&#xff1a;A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛&#xff0c;也可能不参加。因为某种原因&#…

bind merge r 和join_R语言并行读取csv:地表最快csv合并方法

作者&#xff1a;黄天元&#xff0c;复旦大学博士在读&#xff0c;热爱数据科学与开源工具&#xff08;R&#xff09;&#xff0c;致力于利用数据科学迅速积累行业经验优势和科学知识发现&#xff0c;涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图…

fanuc机器人编程手册_是谁需要G代码编程机器人?

用G代码编程机器人是一个5&#xff0c;6年前就碰到过的一个概念。当时就有点困惑&#xff0c;不过没有细究为何提出这样的想法。这个问题一直搁置很久也没有想起来主动去了解&#xff0c;去和同行去交流。今天在翻阅西门子自动化产品手册时&#xff0c;看到SINUMERIK产品介绍后…

java各个平台订单动态对接_平台订单丨全国各地最新采购、代加工订单,免费联系对接...

寻求&#xff1a;地铁闸机加工件定制加工需要两种闸机&#xff0c;一种扇门&#xff0c;一种旋转扇门&#xff0c;两必须都按照图纸加工&#xff0c;请仔细审核图纸&#xff0c;欢迎有实力的友商前来洽谈&#xff0c;不符勿扰&#xff0c;谢谢&#xff01;求购&#xff1a;镀锌…

零基础入门c语言免费教程,C语言零基础急速入门免费教程不定期更新

很多粉丝问我陈老师为什么你会教c语言和java语言&#xff1f;因为名字中”陈“字的汉语拼音中“chen””陈“&#xff0c;和“c”语言是同一个首字母“c”&#xff0c;所以我教“c”语言。又因为同学、学生、粉丝、朋友、同事、亲人们叫我杰哥&#xff0c;汉语拼音中的”jie“&…