设为首页 收藏本站
查看: 797|回复: 0

shell脚本中if与case使用,查找文件locate与find的使用,压缩...

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-8-17 09:26:41 | 显示全部楼层 |阅读模式
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
#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的文件

查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
[iyunv@zczx ~]# find / -nouser -nogroup -atime -7

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

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

查找/etc目录下至少有一类用户没有执行权限的文件
[iyunv@zczx ~]# find /etc/ -not -perm /111

查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件
[iyunv@zczx ~]# find /etc/init.d/ -perm -113



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-259058-1-1.html 上篇帖子: shell 脚本之基础篇作业 下篇帖子: 简单shell脚本编程示例(循环)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表