码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2016-08-16 22:21:51      阅读:647      评论:0      收藏:0      [点我收藏+]

标签:shell脚本   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

技术分享

技术分享


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

技术分享

技术分享



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

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的文件

技术分享

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

locate 是外部命令

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

技术分享


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

        默认可以多指令使用

技术分享



文件类型

   -type

f: 普通文件

d: 目录文件

l: 符号链接文件

s:套接字文件

b: 块设备文件

c: 字符设备文件

p: 管道文件


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

技术分享



组合条件:

与:-a


或:-o


非:-not, !


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

默认可以多指令使用

技术分享


摩根定律:

非(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(裁掉)

技术分享



根据文件大小来查找:

-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

技术分享



根据权限查找

-perm +数字表示的权限

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

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

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


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

技术分享

技术分享


处理动作:


  -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 解压文件

技术分享

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

zcat m.gz 


gzip 压缩(较常用

gzip m   压缩文件,.gz格式

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

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

技术分享


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的所有文件

技术分享


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

技术分享


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

技术分享技术分享


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

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


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

技术分享


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

技术分享


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

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


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

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



本文出自 “zczx_展鸿” 博客,请务必保留此出处http://swzczx.blog.51cto.com/11767585/1839241

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

标签:shell脚本   find   压缩解压和递归工具   

原文地址:http://swzczx.blog.51cto.com/11767585/1839241

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!