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

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

read命令的使用

作用:

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

        -p指定要显示的提示

        -t TIMEOUT

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

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

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

条件选择之if的使用

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

单分支

    if 判断条件;then

        条件为真的分支代码

    fi

EX.单分支案例

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

双分支

    if 判断条件; then

        条件为真的分支代码

    else

        条件为假的分支代码

    fi

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

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

多分支

    if 判断条件1; then

        if-true

    elif 判断条件2; then

        if-ture

    elif 判断条件3; then

        if-ture

    …

    else

        all-false

    fi

EX.多分支案例

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

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

条件选择之case的使用

case语句语法格式:

case 表达式 in 

    模式1)

        条件1

     ;;

    模式2)

        条件2

     ;;

    模式n)

        条件n

     ;;

    *)

        剩余条件

    ;;

 esac

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

    a|b:a或者b

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

    ?:匹配任意单个字符

    [ ]:范围匹配

EX.case的使用案例

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

文件查找的使用

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

文件查找相关命令: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行搜索出来的内容。

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

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

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

小总结:在生产环境中,如果使用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结尾的文件

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

     -type TYPE:

        f: 普通文件

        d: 目录文件     

        l: 符号链接文件

        s:套接字文件

        b: 块设备文件

        c: 字符设备文件

        p: 管道文件

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

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

(4)组合条件: 

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

    或:-o

    非:-not, !

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

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

(5)德·摩根定律:

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

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

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

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

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

    -size [+|-]#UNIT

    常用单位:k, M, G

    #UNIT: (#-1, #]

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

    -#UNIT:[0,#-1]

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

    +#UNIT:(#,∞)

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

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

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

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

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

(7)根据时间戳:

    以“天”为单位;

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

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

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

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

    -mtime        修改时间

    -ctime        改变时间

    以“分钟”为单位:

    -amin

    -mmin

    -cmin

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

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

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

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

(8)根据权限查找:

    -perm [/|-]MODE

    MODE: 精确权限匹配

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

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

    0 表示不关注

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

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

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

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

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

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

4.find命令的处理动作:

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

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

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

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

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

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

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

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

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

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

    find | xargsCOMMAND

EX.处理动作示例

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

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

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

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

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

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

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

压缩、解压缩工具

compress/uncompress 命令的使用

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

    -d: 解压缩,相当于 uncompress

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

    -v: 显示详情

uncompress解压缩

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

EX.compress示例

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

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

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

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

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

bzip2/bunzip2/bzcat 命令的使用

bzip2 [OPTION]… FILE …

    -k: keep, 保留原文件

    -d:解压缩

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

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

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

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

xz/unxz/xzcat 命令的使用

xz[OPTION]… FILE …

    -k: keep, 保留原文件

    -d:解压缩

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

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

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

zip/unzip 命令的使用

打包压缩目录

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

解包解压缩

unzip sysconfig.zip

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

示例:

cat /var/log/messages | zip message –

unzip -p message > message

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

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

EX.解压目录到指定路径

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

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

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

(0)
~微风~~微风~
上一篇 2016-08-18
下一篇 2016-08-18

相关推荐

  • mysql基础篇(一些基本概念的总结)

    一、安装以及初始化     软件包来源         1. vendor, rpm           2. 官网,source code 编译 &…

    Linux干货 2015-12-03
  • 第二周 N28

    作业二

    2017-12-10
  • mysql知识系列–东西比较全

     A。结构化查询语言(structured query language) B。SQL语句分类  -在MySql数据库中,SQL语句主要可以划分以下几类:  ——DDL(data definition language):数据定义语言,定义对数据库对象(库、表、列、索引)的操作  -create,drop,alter,…

    Linux干货 2017-02-14
  • find文件查找

    文件查找      在文件系统上查找符合条件的文件:      实现工具:locate,find locate:      构建于实现构建好的索引库:/var/lib/mlocate/mlocate.db   &nbsp…

    Linux干货 2016-08-22
  • OpenStack Icehouse私有云实战部署

    前言 相信你一定对“云主机”一词并不陌生吧,通过在Web页面选择所需主机配置,即可快速定制一台属于自己的虚拟主机,并实现登陆操作,大大节省了物理资源。但这一过程是如何实现的呢?本文带来OpenStack Icehouse私有云实战部署。 OpenStack 简介 OpenStack是由网络主机服务商Rackspace和美国宇航局联合推出的一个开源项目,Ope…

    Linux干货 2015-07-29
  • 8月22日shell脚本编程之循环和函数

    shell脚本编程 本章内容 编程基础 脚本基本格式 变量 运算 条件测试 流程控制 函数 数组 高级字符串操作 高级变量 配置用户环境 编程基础 程序:指令+数据 编程程序风格:   过程式:以指令为中心,数据服务于指令   对象式:以数据为中心,指令服务于数据 shell程序:提供了编程能力,解释执行 程序的执行方…

    Linux干货 2016-08-24

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-19 14:31

    文章对当天总结的内容很进行了完整的总结和梳理,态度端正,作业完成的也很不错,再接再厉。