linux shell编程文件内容,Linux之bash shell脚本编程入门篇(二)以及文件查找和压缩的使用...

bash shell脚本编程入门篇(二)

read命令的使用

作用:

使用read来把输入值分配给一个或多个shell变量:

-p指定要显示的提示

-t TIMEOUT

read从标准输入中读取值,给每个单词分配一个变量,所有剩余单词都被分配给最后一个变量

EX.read -p “Enter a filename:“ FILE

3c8ce6380daa33c267ccb0e2e66a02de.png

条件选择之if的使用

if的作用:选择执行(注意:if语句可嵌套)

单分支

if 判断条件;then

条件为真的分支代码

fi

EX.单分支案例

3c8ce6380daa33c267ccb0e2e66a02de.png

双分支

if 判断条件; then

条件为真的分支代码

else

条件为假的分支代码

fi

EX.双分支并嵌套if语句的例子

3c8ce6380daa33c267ccb0e2e66a02de.png

多分支

if 判断条件1; then

if-true

elif 判断条件2; then

if-ture

elif 判断条件3; then

if-ture

else

all-false

fi

EX.多分支案例

3c8ce6380daa33c267ccb0e2e66a02de.png

总结:if的使用,是逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if语句

条件选择之case的使用

case语句语法格式:

case 表达式 in

模式1)

条件1

;;

模式2)

条件2

;;

模式n)

条件n

;;

*)

剩余条件

;;

esac

case中各模式可以使用glob匹配模式:

a|b:a或者b

*:匹配任意长度的任意字符

?:匹配任意单个字符

[ ]:范围匹配

EX.case的使用案例

3c8ce6380daa33c267ccb0e2e66a02de.png

文件查找的使用

文件查找作用:在文件系统上查找符合条件的文件;

文件查找相关命令:locate, find

非实时查找(数据库查找):locate

实时查找:find

locate命令的使用

1.locate命令特点:

(1)查询系统上预建的文件索引数据库

/var/lib/mlocate/mlocate.db

(2)依赖于事先构建的索引

(3)索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动更新数据库(updatedb)

(4)索引构建过程需要遍历整个根文件系统,极消耗系统IO资源

(5)工作特点:

查找速度快

模糊查找

非实时查找

搜索的是文件的全路径,不仅仅是文件名

可能只搜索用户具备读取和执行权限的目录

2.locate相关命令:

locate KEYWORD

(1)选项:

-i 执行区分大小写的搜索

-n N只列举前N个匹配项目

-r 支持使用正则表达式

(2)模糊搜索

locate "png" ;搜索含有jpg字眼的文件

(3)支持正则表达式

locate -r '\.png$' 使用regex来搜索以.jpg结尾的文件

EX.使用locate搜索以.png结尾的文件,不区分png的大小写,且只显示前10行搜索出来的内容。

3c8ce6380daa33c267ccb0e2e66a02de.png

EX.由于locate搜索的内容依赖于/var/lib/mlocate/mlocate.db里面的内容,所以如果数据块里面没有这个内容的话就搜索不到这个内容了。甚至有时候有些数据块里面有的内容也搜不出来。

3c8ce6380daa33c267ccb0e2e66a02de.png

小总结:在生产环境中,如果使用locate命令搜索不到的想要内容,也不要用updatedb命令更新数据库,因为可能要更新的数据有很多,这样的话会造成系统会产生大量的IO,会造成系统严重卡顿。

find命令的使用

1.find命令的特点:

(1)实时查找工具,通过遍历指定路径完成文件查找;(普通用户需要注意权限问题)

(2)查找速度略慢

(3)精确查找

(4)可能只搜索用户具备读取和执行权限的目录

2.find命令的语法:

find [OPTION]… [查找路径] [查找条件] [处理动作]

查找路径:指定具体目标路径;默认为当前目录

查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件

处理动作:对符合条件的文件做操作,默认输出至屏幕

3.find命令的查找条件

(1)根据文件名和inode查找:

-name "文件名称":支持使用glob

*, ?, [], [^]

-iname"文件名称":不区分字母大小写

-inumn 按inode号查找

-samefilename 相同inode号的文件

-links n 链接数为n的文件

-regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称

EX.直接匹配目录下面的以s开头,以.sh结尾的文件

3c8ce6380daa33c267ccb0e2e66a02de.png

EX.匹配目录下面以s开头,以d.sh结尾的文件,并且忽略大小写

3c8ce6380daa33c267ccb0e2e66a02de.png

EX.匹配/testdir/shells下面以s开头,以.sh结尾的文件

3c8ce6380daa33c267ccb0e2e66a02de.png

(2)根据属主、属组查找:

-user USERNAME:查找属主为指定用户(UID)的文件

-group GRPNAME: 查找属组为指定组(GID)的文件

-uidUserID:查找属主为指定的UID号的文件

-gidGroupID:查找属组为指定的GID号的文件

-nouser:查找没有属主的文件

-nogroup:查找没有属组的文件

EX.查找/testdir/shells/下面属主为w,属组为wan的文件

3c8ce6380daa33c267ccb0e2e66a02de.png

(3)根据文件类型查找:

-type TYPE:

f: 普通文件

d: 目录文件

l: 符号链接文件

s:套接字文件

b: 块设备文件

c: 字符设备文件

p: 管道文件

EX.查找/testdir/shells/下面的目录文件

3c8ce6380daa33c267ccb0e2e66a02de.png

(4)组合条件:

与:-a    (默认情况下面已经是-a,例如 -user A -group A跟-user A -a -group A是一个意思)

或:-o

非:-not, !

EX.查找属组为w或者属组为w的文件,注意,用-o的时候,前后都需要加一个-ls.否则,只显示后者(即-group w的-ls的结果)

3c8ce6380daa33c267ccb0e2e66a02de.png

(5)德·摩根定律:

( 非 P ) 或 ( 非 Q ) = 非 ( P 且 Q )

( 非 P ) 且 ( 非 Q ) = 非 ( P 或 Q )

EX.查找属主和属组都不是root的文件

3c8ce6380daa33c267ccb0e2e66a02de.png

(6)根据文件大小来查找:

-size [+|-]#UNIT

常用单位:k, M, G

#UNIT: (#-1, #]

如:6k 表示(5k,6k]

-#UNIT:[0,#-1]

如:-6k 表示[0,5k]

+#UNIT:(#,∞)

如:+6k 表示(6k,∞)

EX.查找/testdir/shells/目录下文件大于1k的文件

3c8ce6380daa33c267ccb0e2e66a02de.png

EX.查找/testdir/shells/目录下文件大于1k的文件,并且排除bierendesh这个目录

3c8ce6380daa33c267ccb0e2e66a02de.png

(7)根据时间戳:

以“天”为单位;

-atime[+|-]#  访问时间

#: [#,#+1)    无符号:表示短于(#+1)>x>=#天的时间段被访问过

+#: [#+1,∞]   表示(#+1)天之外被访问过

-#: [0,#)      表示#天内被访问过的

-mtime        修改时间

-ctime        改变时间

以“分钟”为单位:

-amin

-mmin

-cmin

EX.找出~/bin目录下面两天内修改过的文件并且按照提示删除

3c8ce6380daa33c267ccb0e2e66a02de.png

EX.找出~/bin目录下面两天内修改过的文件并且直接删除

3c8ce6380daa33c267ccb0e2e66a02de.png

(8)根据权限查找:

-perm [/|-]MODE

MODE: 精确权限匹配

/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+ 从centos7开始淘汰

-MODE:每一类对象都必须同时拥有指定权限,与关系

0 表示不关注

EX.精确查找权限为644的文件

3c8ce6380daa33c267ccb0e2e66a02de.png

EX.查找u,g,o组都至少有读和执行权限的文件

3c8ce6380daa33c267ccb0e2e66a02de.png

EX.查找u,g,o其中一个有读写权限的文件和目录

3c8ce6380daa33c267ccb0e2e66a02de.png

4.find命令的处理动作:

-print:默认的处理动作,显示至屏幕;

-ls:类似于对查找到的文件执行“ls -l”命令

-delete:删除查找到的文件;

-flsfile:查找到的所有文件的长格式信息保存至指定文件中

-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令;

对于每个文件执行命令之前,都会交互式要求用户确认

-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令

{}: 用于引用查找到的文件名称自身

find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令

有些命令不能接受过多参数,此时命令执行可能会失败,下面方式可规避此问题

find | xargsCOMMAND

EX.处理动作示例

(1)删除符合u=读,或g=任意,或o=任意的文件

3c8ce6380daa33c267ccb0e2e66a02de.png

EX.把搜索出来的结果存档到一个指定的文件

3c8ce6380daa33c267ccb0e2e66a02de.png

EX.搜索指定文件并且对符合条件的文件执行指定命令,-ok是会询问,换成-exec则直接执行

3c8ce6380daa33c267ccb0e2e66a02de.png

小总结:find命令相当强大,但是各种参数也是很多的,需要查找时间的关系,还有权限/和-符号代表的意义。以及不要搞混乱德·摩根定律。

压缩、解压缩工具

compress/uncompress 命令的使用

compress [-dfvcVr] [-b maxbits] [file …]

-d: 解压缩,相当于 uncompress

-c: 结果输出至标准输出,不删除原文件

-v: 显示详情

uncompress解压缩

zcat file.Z>file 能查看压缩文档并且重定向到指定文件,相当于~解压缩..到~

EX.compress示例

3c8ce6380daa33c267ccb0e2e66a02de.png

gzip/gunzip 命令的使用

gzip[OPTION]… FILE …

-d: 解压缩,相当于gunzip

-c: 将压缩或解压缩的结果输出至标准输出

-#:1-9,指定压缩比,值越大压缩比越大

zcat:不显式解压缩的前提下查看文本文件内容

EX.示例

gzip -c messages >messages.gz

gzip -c -d messages.gz > messages

zcat messages.gz > messages

3c8ce6380daa33c267ccb0e2e66a02de.png

EX.通过重定向解压了并保持原文件的案例

3c8ce6380daa33c267ccb0e2e66a02de.png

bzip2/bunzip2/bzcat 命令的使用

bzip2 [OPTION]… FILE …

-k: keep, 保留原文件

-d:解压缩

-#:1-9,压缩比,默认为6

bzcat:不显式解压缩的前提下查看文本文件内容

EX.用bzip2压缩文件并且保留原文件的示例

3c8ce6380daa33c267ccb0e2e66a02de.png

xz/unxz/xzcat 命令的使用

xz[OPTION]… FILE …

-k: keep, 保留原文件

-d:解压缩

-#:1-9,压缩比,默认为6

xzcat: 不显式解压缩的前提下查看文本文件内容

3c8ce6380daa33c267ccb0e2e66a02de.png

zip/unzip 命令的使用

打包压缩目录

zip –r 指定压缩文件 压缩目录

解包解压缩

unzip sysconfig.zip

这个命令最大的亮点是可以压缩目录,其他命令暂时都不支持压缩目录。

示例:

cat /var/log/messages | zip message –

unzip -p message > message

EX.压缩目录,需要注意输入命令时候的压缩文件和目录位置

3c8ce6380daa33c267ccb0e2e66a02de.png

EX.解压目录到指定路径

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

原创文章,作者:~微风~,如若转载,请注明出处:http://www.178linux.com/36690

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值