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 10:10
下一篇 2016-08-18 10:10

相关推荐

  • 使用httpd反向代理模块实现tomcat负载均衡集群(下)

    上一篇讲解了http使用mod_http和mod_ajp代理模块实现tomcat负载均衡,下面我们来讲解使用http的mod_jk实现taomcat的负载均衡集群: 注意:http的mod_jk是第三方扩展模块,在新http版本中以不支持,在httpd 1.3和2.0效果较好 6、使用mod_jk实现tomcat负载均衡集群 6.1安装mod_jk [roo…

    Linux干货 2015-07-21
  • Linux中的文本处理工具—sed

    sed 处理文本工具 一、概述   Stream EDitor,行编辑器    sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文…

    Linux干货 2016-08-10
  • root用户密码破解

    方法一:进入单用户模式破解root密码 (1)编辑grub菜单(选定要编辑的title,而后使用e命令) (2)在选定的kernel后附加 1,s,S或single都可以 (3)在kernel所在行键入"b"命令即可进入单用户模式 (4)运行passwd命令修改root用户密码 并重启 (5)输入密码即可登录 方法二:进入救援模…

    Linux干货 2016-09-15
  • 文件、目录权限

    批量创建新用户: newusers passwd格式文件 批量创建用户,必须和/etc/passwd下的文件格式一样   下面开始批量创建:   首先准备好一个文件:用vi命令建一个user.txt 如图: 然后用cat user.txt 然后newusers批量创建,cat /etc/passwd查看下: 创建成功 批量修改用…

    Linux干货 2016-08-04
  • LVM逻辑卷管理练习

         小编今天要讲的内容是如何创建逻辑卷,然后扩展它、缩减它。LVM 的重点就在于可以弹性的调整文件系统的容量!所以,下面练习开始。 1、创建一个至少有两个PV组成的大小为20G的名为testvg的 VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻 辑卷testlv;挂载至/users目录。 ①准备两个10G的…

    2017-08-26
  • 马哥教育网络班20期+第四周博客作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 # cp -R /etc/skel /home/tuser1 # chmod -R go-x /home/tuser1 2、编辑/etc/gro…

    Linux干货 2016-06-29

评论列表(1条)

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

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