shell脚本中if与case使用,查找文件locate与find的使用,压缩,解压及归档工具

shell脚本中if与case使用

查找文件locate与find的使用

压缩,解压及归档工具


执行的循序

 顺序执行

 选择执行

 循环执行

条件语句if

if只是一个有含义的词,不能单独作为指令使用。

单分支

     if 条件判断:then

            条件为真的分支代码

     fi

双分支 

     if 判断条件:then

            条件为真的分支代码

     else

         条件为假的分支代码

     fi

多分支

      if 判断条件1,

         if-true

      elif 判断条件2,then

          if-ture

      elif 判断条件3,then 

          if-ture

           …

      else 

          all-false

      fi

QQ图片20160816110625.png

QQ图片20160816110714.png

case 条件判断

多用于离散值的判断

case  

PAT1)

     分支

     ;;

PAT2)

     分支2

     ;;

*)

     默认分支

     ::

esac     

case   *:任意长度任意字符

       ?:任意单个字符

       []:指定范围内的任意单个字符

       a|b: a or b

例子:

case $number in

1|3|6)

echo good

;;

2|4|7)

echo bad

;;

10|8|66)

echo very good

;;

esac

read -p "please input a number: " number

[ -z "$number" ] && echo "you must input a number " && exit

QQ图片2016081414244.png

QQ图片20160816110529.png

判断输入的数字是否正整数

read -p "please input a integer" n

! expr "$n" + 0 &> /dev/null  && echo no digit && exit 

[ $n -gt 0 ] && echo integer || echo "passive inte ger or zoro"

文件查找和压缩文件

文件查找

locate

locate +文件名

默认是全文件系统搜索

基于数据库搜索 /var/lib/mlocate/mlocate,db

updatedb 更新数据库指令

-i 执行忽略大小写

-n 只显示指定的行数目

locate foo  搜索名称或路径带有foo的文件

QQ图片20160816111101.png

locate -r '\.sh$' 搜索以.sh结尾的文件

locate 是外部命令

-r, –regexp REGEXP    搜索基本正则表达式 REGEXP 来代替模式

QQ图片20160816111232.png

find

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

查找速度慢

精确查找

实时查找

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

find 是外部命令

查找条件:

-name "文件名称":可以使用 *,?,[],[^]

      find -name "checkint*" 要使用"" ''不然会出现问题

      find -name '[af]*.sh'

-iname:忽略大小写

-inum n :按inode号码查找

-samefile name :查找相同inode号码的文件

-links n:连接数目为n的文件

-regex "PATTERN" :

      find -regex '.*/.sh$'

-p:显示文件所使用的真实路径

根据属主和属组查找

按照UID,GID搜索

-user name:查找属主为指定用户的文件

-group grpname:查找属组为指定组的文件

-uid userID:查找属主指定UID的文件

-gid groupID:查找属组指定GID的文件

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

        find / nouser

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

        find / -nouser -nogroup

        默认可以多指令使用

QQ图片20160816111355.png

文件类型

   -type

f: 普通文件

d: 目录文件

l: 符号链接文件

s:套接字文件

b: 块设备文件

c: 字符设备文件

p: 管道文件

find / -type b  搜索块设备文件

QQ图片20160816111646.png

组合条件:

与:-a

或:-o

非:-not, !

find -not -name "*.sh" -not -name "f*"

默认可以多指令使用

QQ图片20160816111917.png

摩根定律:

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

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

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

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

不加括号括住所选的条件,最后加的-ls只会显示最后的条件的值

-a:与的使用时候可以直接在后面 -ls

-o:或的时候使用要用括号括起来

-path 排除

find /root -path/root/bin -a -prune -o -name "*.sh" -print(打印)  排除了/rootbin ,查找.sh结尾 的文件打印

格式:-path 路径 -a -prune(裁掉)

QQ图片20160816112300.png

根据文件大小来查找:

-size [+|-]#UNIT

常用单位:k, M, G

find / -size 10K =(9K,10K]

#UNIT: (#-1, #],如:6k

        (5k.6k]  5k到6k之间

-#UNIT:[0,#-1], 如:-6k

        [0,5k]  0k到5k

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

        [6k,+∞] 6k到无穷大

根据时间戳:

     用“天”为单位

     -atime [+|-]#

         #: [#,#+1)

        +#: [#+1,∞]

        -#: [0,#)

        -mtime

        -ctime

   -atime 7 [7,8)

   -atime -7 [0,7]

   -atime +7 [8,+∞)

find /etc/ -mmin -1 一分钟以内发生变化的文件

以“分钟”为单位:

-amin

-mmin

-cmin

QQ图片20160816113013.png

根据权限查找

-perm +数字表示的权限

find /bin/ -perm 4755 -ls 精确查找权限为4755的文件

find -perm /222(+222) 7版本用/222 属主属组其他有一个有读权限就满足搜索条件  

find -perm -222 属主属组其他都要有读权限才能满足搜索条件

没有-,/,+,直接+数字就是精确匹配

QQ图片20160816113013.png

QQ图片20160816113347.png

处理动作:

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

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

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

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

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

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

find -perm -222 -ok rm {} \:

                  固定语法要带\:结束

                -ok chmod o-w {} \:

                -exec cp {} {} .bak \:

                {}专门配合find使用,表示搜索出匹配的文件

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

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

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

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

find | xargsCOMMAND

find -perm /222 |xargs 0(换行)

find -perm /002 type f -delete 删除权限002的文件

压缩,解压及归档工具

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

-d: 解压缩,相当于

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

-v: 显示详情

uncompress解压缩

zcatfile.Z>file

compress m  压缩,源文件删除了

compress -c m > m.Z

compress -c -d m.Z >m 解压缩,不删除源文件。

uncompress m.Z 解压文件

QQ图片20160816142538.png

zcat m.Z 看压缩文件内容,不进行文件解压

zcat m.gz 

gzip 压缩(较常用

gzip m   压缩文件,.gz格式

gzip -d m.gz 解压文件=gunzip

gzip -9 mgz(文件名)压缩比例(1-9),默认是6

QQ图片20160816143201.png

bzip2  压缩效率更高

bzip2 m(文件)

bzip2 -d m 解压缩文件

bzip2 -k m 压缩保留源文件

bzip2 -9 m (1-9)压缩比例,默认是6

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

xz  压缩效率最高

xz m(文件)

xz -d m 解压缩文件

xz -k m 压缩保留源文件

xz -9 m (1-9)压缩比例,默认是6

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

zip 打包压缩 (压缩多个文件)

zip –r sysconfig  sysconfig/

zip m m

unzip m.zip 解压缩

cat /var/log/messages | zip message –  压缩文件

unzip -p message >message 会将解压缩的结果显示到屏幕上,但不会执行任何的转换。

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

QQ图片20160816143738.png

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

blob.png

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

QQ图片20160816144310.png

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

[root@zczx ~]# find / -nouser -nogroup -atime -7

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

QQ图片20160816144749.png

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

QQ图片20160816145435.png

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

[root@zczx ~]# find /etc/ -not -perm /111

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

[root@zczx ~]# find /etc/init.d/ -perm -113

原创文章,作者:swzczx,如若转载,请注明出处:/36348

评论列表(1条)

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

    文章写的很详细,也很认真,对当天知识的梳理好好进行了梳理,是不是收获很大呢?继续保持哦

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1660809109@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班

友情链接:万达娱乐注册  万达娱乐开户  万达娱乐主管QQ  万达娱乐直属  万达主管  万达开户  万达娱乐主管  guoqibee.com  万达娱乐直属QQ