条件判断if、case与文件查找locate、find及相关练习

一、条件选择

1、if:按条件执行脚本中的内容,可以使用嵌套结构,有单分支、双分支和多分支结构,每个条件中可以有不止一条语句,如果有多条语句,可以用and(-a)或or(-o)连接在一起,但不能使用&&或||:

if COMMANDS; then

    COMMANDS;

    [ elif COMMANDS; then

    COMMANDS; ]

    …

    [ else COMMANDS; ] 

fi

2、case:判断执行脚本中的内容,把变量中的内容与多个模板进行匹配,然后根据成功的模板决定执行的代码。case语句时由上到下执行,所以模板应该从特殊到普通,最后用*匹配其余没有匹配到的字符:

case WORD in 

PATTERN [| PATTERN]…) 

    COMMANDS 

    ;;

PATTERN [| PATTERN]…) 

    COMMANDS 

    ;;

*)

    默认分支

    ;;

esac

二、文件查找

1、locate:通过系统上预建的文件索引数据库/var/lib/mlocate/mlocate.db查找文件,索引构建实在系统较为空闲时自动进行,管理员也可以手动更新数据库,索引构建过程需要遍历整个根文件系统,极消耗资源。

    工作特点:

        查找速度快

        模糊查找

        非实时查找

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

        可能住搜索用户具备执行权限的目录

locate KEYWORD 搜索名称或路径带有段剑子的文件

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

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

    -r  '\PATTERN' 搜索被正则表达式匹配到的文件

2、find:实时查找工具,通过遍历指定路径完成文件查找

    工作特点:

        查找速度略慢

        精确查找

        实时查找

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

    

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

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

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

    根据文件名和inode:

        -name "文件名称":按文件名查找,支持通配符

        -iname "文件名称":按文件名查找,不区分大小写

        -inum  n  按照inode号查找文件

        -samefile FILENAME  查看inode号相同的文件

        -links n  链接数为n的文件

        -regex "PATTERN":以正则表达式匹配文件路径中字符串,不仅仅是文件名称

    

    根据属主、属组查找: 

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

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

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

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

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

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

    根据文件类型查找:

        -type TYPE: 

            f: 普通文件 

            d: 目录文件 

            l: 符号链接文件 

            s:套接字文件 

            b: 块设备文件 

            c: 字符设备文件 

            p: 管道文件

    组合多个条件查找文件

        -a  与

        -o  或

        -not,!  非

        德·摩根定律:

            !A -a !B = !(A -o B) 

            !A -o !B = !(A -a B)

    根据文件大小查找

        -size [+|-]#UNIT

            常用单位:K,M,G

            #UNIT:(#-1,#],如6k表示(5,6]k

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

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

    根据文件权限查找

        -perm[/|-] MODE

            MODE  精确权限匹配

            /MODE  任何一类对象的权限中只要能一位匹配即可,表示或(|)关系CentOS7把+淘汰

            -MODE  每一类对象都必须同时又有指定权限,表示与关系(&)

            0  表示不关注此位权限值

            

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

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

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

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

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

-ok COMMAND {} \:对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前都会交互式要求用户确认;

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

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

find传递查找到的文件至后面指定的命令时,查找到所有符合 条件的文件一次性传递给后面的命令有些命令不能接受过多参数,此时命令执行可能会失败,下面方式可规避此问题 

    find | xargs COMMAND 

练习:

1、写一个脚本/root/bin/createuser.sh,实现如下功能: 使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的id号等信息 


blob.png


2、写一个脚本/root/bin/yesorno.sh,提示用户输入yes或no,并判断用户输入的是yes还是no,或是其它信息 


blob.png


3、写一个脚本/root/bin/filetype.sh,判断用户输入文件路径,显示其文件类型(普通,目录,链接,其它文件类型) 


blob.png


4、写一个脚本/root/bin/checkint.sh,判断用户输入的参数是否为正整数

blob.png

1、查找/var目录下属主为root,且属组为mail的所有文件 

blob.png


2、查找/var目录下不属于root、lp、gdm的所有文件 


find /var -not \( -user root -o -user lp -o -user gdm \) -ls


3、查找/var目录下最近一周内其内容修改过,同时属主不为 root,也不是postfix的文件 


blob.png


4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件 


 find / \( -nouser -o  -nogroup \) -atime -7 -ls


5、查找/etc目录下大于1M且类型为普通文件的所有文件 


find -size +1M -type f -ls


6、查找/etc目录下所有用户都没有写权限的文件 


 find  /etc -not -perm /222 


7、查找/etc目录下至少有一类用户没有执行权限的文件 


find /etc -not -perm -111 


8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件

blob.png

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

(0)
zhanghuanyuzhanghuanyu
上一篇 2016-08-18 10:10
下一篇 2016-08-18 10:10

相关推荐

  • 优云软件老司机:如何让运维操作更轻松、高效

    讲师介绍 庞辉富 •广通软件技术总监 •拥有10多年IT运维管理软件研发经验 •致力于自动化运维解决方案的研究和推广 •主导研发的产品广泛应用于海关、公安、能源等多个行业 技术发展给运维带来的挑战 当前的IT建设在这些新技术的演进下,我们看到的是呈现“双态IT”特征。Gartner也提出双模IT理论,与现在谈的双态IT是异曲同工的,不再是一种单纯的形态,而是…

    系统运维 2017-01-09
  • 系统管理之Selinux详解

    SELinux: SELinux概念SELinux配置启用SELinux管理文件安全标签管理端口标签管理SELinux布尔值开关管理日志查看SELinux帮助 SELinux概述 SELinux: Secure Enhanced Linux, 是美国国家安全局「NSA=The National Se…

    Linux干货 2016-09-21
  • Keepalive高可用Nginx服务测试

    环境   系统版本:CentOS 7.2  节点1地址:10.1.8.81  节点2地址:10.1.8.83  虚拟IP地址:10.1.8.248 安装软件     yum -y install nginx     yum -y …

    Linux干货 2017-02-16
  • vsftpd基于mysql进行虚拟用户管理

    概述:     FTP是我们日常工作中经常用到的一个服务,但是FTP对用户的管理却比较薄弱,默认状态下,FTP利用pam机制进行账号管理,默认情况下使用的是系统账号,如何提升FTP对用户管理的有效性,针对不同的用户设定不同的上传权限,这就要基于虚拟账号来管理了,本篇就介绍下在vsftpd利用pam机制,结合mysql实…

    Linux干货 2016-10-18
  • 超文本传输协议-HTTP

        超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。     设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或…

    Linux干货 2017-07-31
  • 文本处理工具之grep正则表达式

    grep简介 grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,…

    Linux干货 2016-08-08

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-19 12:04

    对于脚本的学习,我们需要多写,多看优秀代码,而find命令在笔试中是最常用的,我们需要多加练习,熟练掌握。