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

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

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

[[email protected] ~]# find / -nouser -nogroup -atime -7

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

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

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

[[email protected] ~]# find /etc/ -not -perm /111

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

[[email protected] ~]# find /etc/init.d/ -perm -113

时间: 2024-10-08 09:57:41

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

将window的shell脚本通过ftp传输到Linux服务器后, shell脚本中执行时提示“没有那个文件或目录”的解决办法

出现bad interpreter:No such file or directory的原因,是文件格式的问题.这个文件是在Windows下编写的.换行的方式与Unix不一样,但是在vim下面如果不Set一下又完全看不出来. 问题分析:1.将windows 下编写好的SHELL文件,传到linux下执行,提示出错.2.出错信息:bad interpreter: 没有那个文件或目录. 问题原因:因为操作系统是windows,在windows下编辑的脚本,所以有可能有不可见字符.脚本文件是DOS格式

解决shell脚本中 echo 怎么写入换行到文件

測试环境:ubuntu12.04 LTS版本号 echo >> file.txt就可以, 这样的方法对于脚本开头是bash和sh效果都一样, 而echo -e >> file.txt这样的仅仅适合与bash 对于sh,会输入-e到文件然后再换行. 而echo -e "\n" >> file.txt对于bash会连续换2行. 对于sh,会输入-e和一个新空行到文件.

shell脚本中的逻辑判断,文件目录属性判断,if特殊用法,case语句

笔记内容: 20.5 shell脚本中的逻辑判断 20.6 文件目录属性判断 20.7 if特殊用法 20.8/20.9 case判断 笔记日期:2017-11-22 20.5 shell脚本中的逻辑判断 在所有的编程语言中都会有if语句来进行逻辑判断,所以在shell中也不例外. Shell的if语句的判断条件和其他编程语言一样写在if关键字的那一行,但是需要使用方括号括起来,并且变量和逻辑运算符以及方括号都要用空格隔开,这一点和其他的编程语言不一样,整个if语句块以fi关键字表示结尾,the

20.5 shell脚本中的逻辑判断 20.6 文件目录属性判断 20.7 if特殊用法 20.8/20.9 case判断

- 20.5 shell脚本中的逻辑判断 - 20.6 文件目录属性判断 - 20.7 if特殊用法 - 20.8/20.9 case判断 # 20.5 Shell脚本中的逻辑判断 - 很多脚本可以直接用命令执行,比如之前的那个 ``` [[email protected] ~]# for i in `seq 1 5`;do echo $i;done 1 2 3 4 5 [[email protected] ~]# for i in `seq 1 5` > do > echo $i > 

shell脚本中case的用法

shell脚本中case选择语句可以结合read指令实现比较好的交互应答操作,case接收到read指令传入的一个或多个参数,然后case根据参数做选择操作. case的语法如下 case $char in C | c ) command 1 ;; #每一个选择都以双 ;; 结束 M | m ) command 2 ;; * ) # * 未匹配到相符的其他值 echo "error" ;; esac #case的结束语句是以esac 结束 下面结合一个简单的小功能使用,脚本中同时也用到

六十八、shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

一.shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 格式2:if 条件; then 语句; else 语句; fi 格式3:if -; then - ;elif -; then -; else -; fi if:如果. then:然后. -gt:大于. -lt:小于. -eq:等于. -ne:不等于.noeq. -ge:大于等于. -le:小于等于. 格式1:如果满足条件a大于3,则输出ok.最常用. # if [ $a -gt 3 ]; then echo ok;

shell脚本中的逻辑判断 文件目录属性判断 if特殊用法 case判断

一.shell脚本中的逻辑判断在shell脚本中,很多都会逻辑判断,判断某一个数值,判断某一个文件,或者某一个目录,我们针对判断结果再做一些操作,如果没有判断,就没法做一些操作格式1:if条件:then语句:fi例子:[[email protected] ~]# if [ $a -ge 3 ] //分行写就是这样写 thenecho okfiok[[email protected] ~]# if [ $a -ge 3 ]; then echo ok; fi //这是一行写的格式//解释:-gt表

shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

一.shell脚本中的逻辑判断 语法1.格式1if 条件 ; then 语句; fi例:如果a大于3,打印OK [[email protected] ~]# vi 2.sh [[email protected] ~]# bash -v 2.sh #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi ok [[email protected] ~]# bash 2.sh ok [[email protected] ~]# 2.格式2if 条件; then

Shell脚本中的逻辑判断、文件目录属性判断、if的特殊用法、case判断

1.Shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi格式2:if 条件; then 语句; else 语句; fi格式3:if -; then - ;elif -; then -; else -; fi逻辑判断表达式:if [ $a -gt $b ]; if [ $a -lt 5 ]; if [ $b -eq 10 ]等 -gt (>); -lt(<); -ge(>=); -le(<=);-eq(==); -ne(!=) 注意到处都是空格可以使用 &