linux判断是否是压缩文件的if脚本,Linux之条件判断if和文件查找find,打 ...

linux判断是否是压缩文件的if脚本,Linux之条件判断if和文件查找find,打 ...

2023年8月3日发(作者:)

linux判断是否是压缩⽂件的if脚本,Linux之条件判断if和⽂件查找find,打包压。。。在进⾏脚本编写的时候,有时候我们需要判断当前的条件是否符合我们要执⾏的命令,这时候便可以使⽤if语句if语句格式:单条件判断:if 判断条件;then条件判断为真时执⾏的代码命令fi双条件判断:if 判断条件;then条件判断为真时执⾏的代码命令elif 判断条件2;then条件判断为真时执⾏的代码命令fi多分⽀判断:if 判断条件1;then条件判断为真时执⾏的代码命令elif 判断条件2;then条件判断为真时执⾏的代码命令elif 判断条件3;then条件判断为真时执⾏的代码命令else上诉条件都不满⾜时执⾏的代码命令fi*注意:条件判断若是满⾜就是⽴即执⾏当前条件下的代码命令,执⾏完毕后便不会再去执⾏其他的条件判断,if语句就结束了。例⼦1:编写脚本 ,实现如下功能:使⽤⼀个⽤户名做为参数,如果 指定参数的⽤户存在,就显⽰其存在,否则添加之;显⽰添加的⽤户的id号等信息#!/bin/bashif [ -z $1 ]thenecho "your enter is null,please enter name."elif [ ! -z $1 ]thengrep "$1" /etc/passwd &>/dev/nullif [ $? -eq 0 ]thenecho "user $1 is exits"elseecho "starting add user"useradd $1id $1fifi上⾯的执⾏结果貌似是正确的,但是存在着⼀些错误,前⾯我们说了,if的条件判断如果不符合,就会结束或者执⾏下⼀个条件判断语句,所以elif中的条件可以不再判断,因为1来判断更好,不会出现这种情况。现在,做出以下修改。#!/bin/bashif [ -z $1 ]thenecho "your enter is null,please enter name."elseid "$1" &>/dev/nullif [ $? -eq 0 ]thenecho "user $1 is exits"elseecho "starting add user"useradd $1id $1fifi在if条件语句中的判断⽅式有以下⼏种。使⽤格式 if [ 条件1 options 条件2 ],注意⽅括号的前后都含有空格#1.数值测试-eq 是否等于-ne 是否不等于-gt 是否⼤于-ge 是否⼤于等于-lt 是否⼩于-le 是否⼩于等于#2.字符串测试-z STRING 字符串是否为空,没定义或空为真,不空为假,-n STRING 字符串是否不空,不空为真,空为假#3.⽂件测试-a FILE:同 -e-e FILE: ⽂件存在性测试,存在为真,否则为假-b FILE:是否存在且为块设备⽂件-c FILE:是否存在且为字符设备⽂件-d FILE:是否存在且为⽬录⽂件-f FILE:是否存在且为普通⽂件-h FILE 或 -L FILE:存在且为符号链接⽂件-p FILE:是否存在且为命名管道⽂件-S FILE:是否存在且为套接字⽂件-r FILE:是否存在且可读-w FILE:是否存在且可写-x FILE:是否存在且可执⾏FILE1 -nt FILE2 : ⽂件FILE1是否⽐⽂件FILE2新FILE1 -ot FILE2 : ⽂件FILE1是否⽐⽂件FILE2旧上⾯的案例中使⽤了$1符号,这代表什么呢?在shell脚本中,$0,$1,$@,$*都代表着不同的含义$0代表⽂件名的本⾝,$1代表命令⾏中的第⼀个参数$2代表命令⾏中的第⼆个参数$@代表将参数作为单独的个体$*代表将参数作为⼀个整体。看看例⼦#!/bin/bashecho $0echo $1echo $2echo -------------------for i in "$@";doecho "$i"donefor i in "$*";doecho $idone[root@iz2zed4h7bg5dihzfqhmn9z script]# ./ 1 2 3 4./12-------------------12341 2 3 4这是可以看出$@是将命令⾏中的参数当作单独的个体来输出的,⽽$*是将命令⾏中的参数当作整体来输出的。在有时候进⾏脚本编写时,每次创建脚本都需要输⼊#!/bin/bash这⼀⾏,重复的⼯作甚是⽆聊,那么有没有什么简单的⽅法可以避免没次都输⼊这样的⼀⾏呢?vimrc⽂件:vim编辑器的相关的所有功能开关都可以通过.vimrc⽂件来设置。.vimrc⽂件分为系统配置⽂件和⽤户配置⽂件可以使⽤ vim --version来查看两个⽂件的存放路径注意:⽤户配置⽂件优先于系统配置⽂件常⽤配置"==================="适合⾃⼰⽤的vimrc配置⽂件"==================="设置编码set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936set termencoding=utf-8set encoding=utf-8"保存.vimrc⽂件时⾃动重启加载,即让此⽂件⽴即⽣效autocmd BufWritePost $MYVIMRC source $MYVIMRC"语法⾼亮syntax on"设置ruler会在右下⾓显⽰光标所在的⾏号和列号,不⽅便查看,改成设置状态栏显⽰内容"set ruler"设置状态⾏显⽰的内容. %F: 显⽰当前⽂件的完整路径. %r: 如果readonly,会显⽰[RO]"%B: 显⽰光标下字符的编码值,⼗六进制. %l:光标所在的⾏号. %v:光标所在的虚拟列号."%P: 显⽰当前内容在整个⽂件中的百分⽐. %H和%M是strftime()函数的参数,获取时间.set statusline=%F%r [HEX=%B][%l,%v,%P] %{strftime("%H:%M")}"显⽰⾏号set nu "等同于 set number"突出显⽰当前⾏set cursorline "等同于 set cul"突出显⽰当前列set cursorcolumn "等同于 set cuc"共享剪贴板set clipboard+=unnamed"从不备份set nobackup"⾃动保存set autowrite"隐藏⼯具栏"set guioptions-=T"隐藏菜单栏"set guioptions-=m"⾼亮显⽰所有搜索到的内容.后⾯⽤map映射快捷键来⽅便关闭当前搜索的⾼亮."set hlsearch"光标⽴刻跳转到搜索到内容"set incsearch"搜索到最后匹配的位置后,再次搜索不回到第⼀个匹配处"set nowrapscan"去掉输⼊错误时的提⽰声⾳set noeb" 默认按下Esc后,需要等待1秒才⽣效,设置Esc超时时间为100ms,尽快⽣效set ttimeoutset ttimeoutlen=100"在处理未保存或只读⽂件的时候,弹出确认set confirm"让Backspace键可以往前删除字符."Debian系统⾃带的vim版本会加载⼀个⽂件,默认已经设置这⼀项,"可以正常使⽤Backspace键.如果使⽤⾃⼰编译的vim版本,并⾃⾏配置.vimrc⽂件,"可能就没有设置这⼀项,导致Backspace键⽤不了,或者时灵时不灵.所以主动配置."使回格键(backspace)正常处理indent, eol, start等set backspace=indent,eol,start"允许backspace和光标键跨越⾏边界"set whichwrap+=,h,l"去掉有关vi⼀致性模式,避免操作习惯上的局限.set nocompatible"FIXME 在MS-DOS控制台打开vim时,控制台使⽤⿏标右键来复制粘贴,设置"全⿏标模式,⿏标右键被映射为visual mode,不能⽤来复制粘贴,不⽅便."但是如果不设置⿏标模式,会⽆法使⽤⿏标滚轮来滚动界⾯.经过验证,发现"可以设成普通模式mouse=n来使⽤⿏标滚轮,也能使⽤⿏标右键复制粘贴." mouse=c/mouse=i模式都不能⽤⿏标滚轮. Linux下还是要设成 mouse=aset mouse=n"set selection=exclusive"set selectmode=mouse,key"⾼亮显⽰括号匹配set showmatch"设置Tab长度为4空格set tabstop=4"设置⾃动缩进长度为4空格set shiftwidth=4"⾃动缩进,这个导致从外⾯拷贝多⾏以空格开头的内容时,会有多的缩进,先不设置"set autoindent"不要⽤空格代替制表符set noexpandtab"输⼊tab制表符时,⾃动替换成空格"set expandtab"设置softtabstop有⼀个好处是可以⽤Backspace键来⼀次删除4个空格."softtabstop的值为负数,会使⽤shiftwidth的值,两者保持⼀致,⽅便统⼀缩进."set softtabstop=4"显⽰空格和tab键set listchars=tab:>-,trail:-"1=启动显⽰状态⾏, 2=总是显⽰状态⾏.设置总是显⽰状态⾏,⽅便看到当前⽂件名set laststatus=2"⾃动补全:inoremap ( ()i:inoremap ) =ClosePair(')'):inoremap { {}O:inoremap } =ClosePair('}'):inoremap [ []i:inoremap ] =ClosePair(']'):inoremap " ""i:inoremap ' ''ifunction! ClosePair(char)if getline('.')[col('.') - 1] == a:charreturn ""elsereturn a:charendifendfunction"打开⽂件类型检测,并载⼊⽂件类型插件,为特定⽂件类型载⼊相关缩进⽂filetype plugin indent on" 设置⾃动补全的选项. longest表⽰只⾃动补全最⼤匹配的部分,剩余部分通过" CTRL-P/CTRL-N来选择匹配项进⾏补全. menu表⽰弹出可补全的内容列表." 如果有多个匹配,longest选项不会⾃动选中并完整补全,要多按⼀次CTRL-P,⽐较" ⿇烦,不做设置,保持默认设置,vim默认没有设置longest."set completeopt=longest,menu "启⽤这句才会开启⾃动补全"设置背景主题"color asmanian2"设置字体"set guifont=Courier_New:h10:cANSI"设置颜⾊主题,适⽤于⿊⾊背景.colorscheme slate"=============显⽰中⽂帮助if version >= 603set helplang=cnset encoding=utf-8endif"=============新建.c,.h,.sh,.java⽂件,⾃动插⼊⽂件头autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()"""定义函数SetTitle,⾃动插⼊⽂件头func SetTitle()"如果⽂件类型为.sh⽂件if &filetype == 'sh'call setline(1,"############################")call append(line("."), "# File Name: ".expand("%"))call append(line(".")+1, "# Author: LPeng")call append(line(".")+2, "# mail: 7526@")call append(line(".")+3, "# Created Time: ".strftime("%c"))call append(line(".")+4, "############################")call append(line(".")+5, "#!/bin/bash")call append(line(".")+6, "")elsecall setline(1, "/******************************")call append(line("."), " > File Name: ".expand("%"))call append(line(".")+1, " > Author:LPeng")call append(line(".")+2, " > Mail: 7526@ ")call append(line(".")+3, " > Created Time: ".strftime("%c"))call append(line(".")+4, " *****************************/")call append(line(".")+5, "")endif"新建⽂件后,⾃动定位到⽂件末尾autocmd BufNewFile * normal Gendfunc现在根据上⾯的信息来编写⽣成脚本基本格式的脚本,包括作者,联系⽅式,版本,时间,描述等set ts=4set autowriteautocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()"func SetTitle()if expand("%:e") == 'sh'call setline(1,"#!/bin/bash")call setline(2,"#")call setline(3,"###################################")call setline(4,"#Author: xuxiaolong")call setline(5,"#Date: ".strftime("%Y-%m-%d"))call setline(6,"#FileName ".expand("%"))call setline(7,"#Description: The Test script")call setline(8,"#Mail: longge@")call setline(9,"#Copyright (C): ".strftime("%Y")." All Rights Reserved")call setline(10,"###################################")call setline(11,"")endifendfuncautocmd BufNewFile * normal G设置好之后创建脚本⽂件就更⽅便了[root@iz2zed4h7bg5dihzfqhmn9z ~]# vim #!/bin/bash#####################################Author: xuxiaolong#Date: 2020-12-25#FileName #Description: The Test script#Mail: longge@#Copyright (C): 2020 All Rights Reserved###################################再来说说⽂件查找命令findfind是实时查找⼯具,通过遍历指定路径完成⽂件查找格式:find [ optinons ] [ 查找路径] [查找条件] [处理动作]查找路径:指定具体⽬标路径,默认为当前⽬录查找条件:指定查找的标准处理动作:对符合条件的问价做操作,默认为输出打印到当前屏幕options :-maxdepth level 最⼤搜索⽬录深度,指定⽬录下的⽂件为第1级-mindepth level 最⼩搜索⽬录深度1. 按照⽂件名和inode查找-name "⽂件名称":⽀持使⽤glob,如:*, ?, [], [^],通配符要加双引号引起来-iname "⽂件名称":不区分字母⼤⼩写-inum n 按inode号查找-samefile name 相同inode号的⽂件-links n 链接数为n的⽂件-regex “PATTERN”:以PATTERN匹配整个⽂件路径,⽽⾮⽂件名称2.按照属主、属组查找-user USERNAME:查找属主为指定⽤户(UID)的⽂件-group GRPNAME: 查找属组为指定组(GID)的⽂件-uid UserID:查找属主为指定的UID号的⽂件-gid GroupID:查找属组为指定的GID号的⽂件-nouser:查找没有属主的⽂件-nogroup:查找没有属组的⽂件3.按照⽂件的类型来查找-type TYPETYPE可以是以下形式:f: 普通⽂件d: ⽬录⽂件l: 符号链接⽂件s:套接字⽂件b: 块设备⽂件c: 字符设备⽂件p: 管道⽂件4. 组合条件与:-a ,默认多个条件是与关系或:-o⾮:-not !5.按照⽂件⼤⼩来查找-size [+|-]#UNIT常⽤单位:k, M, G,c(byte),注意⼤⼩写敏感#UNIT: (#-1, #]如:6k 表⽰(5k,6k]-#UNIT:[0,#-1]如:-6k 表⽰[0,5k]+#UNIT:(#,∞)如:+6k 表⽰(6k,∞)6.按照⽂件权限来查找-perm [/|-]MODEMODE: 精确权限匹配/MODE:任何⼀类(u,g,o)对象的权限中只要能⼀位匹配即可,或关系,+ 从CentOS 7开始淘汰-MODE:每⼀类对象都必须同时拥有指定权限,与关系0 表⽰不关注7.按照⽂件时间查找以“天”为单位-atime [+|-]##: [#,#+1)+#: [#+1,∞]-#: [0,#)-mtime-ctime以“分钟”为单位-amin-mmin-cmin8.处理动作-print:默认的处理动作,显⽰⾄屏幕-ls:类似于对查找到的⽂件执⾏“ls -l”命令-fls file:查找到的所有⽂件的长格式信息保存⾄指定⽂件中,相当于 -ls > file-delete:删除查找到的⽂件,慎⽤!-ok COMMAND {} ; 对查找到的每个⽂件执⾏由COMMAND指定的命令,对于每个⽂件执⾏命令之前,都会交互式要求⽤户确认-exec COMMAND {} ; 对查找到的每个⽂件执⾏由COMMAND指定的命令{}: ⽤于引⽤查找到的⽂件名称⾃⾝特别说明:find命令根据时间查找详解find命令认为24⼩时之内是第0天,下⾯是帮助理解的图形。例⼦:⽐如我现在时间是2020-02-22 12:00想要查找/etc⽬录下3天内被修改过的⽂件。find /etc -mtime -2例⼦:那想查找前⾯第3天的⽂件呢?第0天就是(2020-02-22 12:00——2020-02-21 12:00),第1天就是(2020-02-21 12:00——2020-02-20 12:00)第2天就是(2020-02-20 12:00——2020-02-19 12:00)第3天就是(2020-02-19 12:00——2020-02-18 12:00)结果就是 find /etc -mtime 3 (其实找到的就是2020-02-19 12:00——2020-02-18 12:00之间被修改过的⽂件)虽然这是写的第三天,但其实真正的是第4天的数据⽂件。例⼦:如果我想查找3天前的⽂件呢?find /etc -mtime +3例⼦:查找/etc⽬录下⼤于1M且类型为普通⽂件的所有⽂件[root@iz2zed4h7bg5dihzfqhmn9z ~]# find /etc/ -size +1M -a -type f -exec ls -lh {} ;-r--r--r-- 1 root root 8.0M Jul 5 14:33 /etc/udev/-rw-r--r-- 1 root root 1.4M Jul 1 13:02 /etc/selinux/targeted/contexts/files/file_-rw-r--r-- 1 root root 3.8M Jul 1 13:02 /etc/selinux/targeted/policy/policy.31-rw------- 1 root root 3.8M Jul 1 13:02 /etc/selinux/targeted/active/-rw------- 1 root root 3.8M Jul 1 13:02 /etc/selinux/targeted/active/上⾯我们说了,find是遍历整个⽬录,那隐藏⽂件是否依然会被查找出来呢?试试看。[root@iz2zed4h7bg5dihzfqhmn9z etc]# dd if=/dev/zero of=/etc/. bs=1M count=1010+0 records in10+0 records out10485760 bytes (10 MB) copied, 0.00742828 s, 1.4 GB/s[root@iz2zed4h7bg5dihzfqhmn9z etc]# ls -l | grep f2[root@iz2zed4h7bg5dihzfqhmn9z etc]# find /etc/ -size +1M -a -type f -exec ls -lh {} ;-rw-r--r-- 1 root root 10M Dec 25 10:39 /etc/.-r--r--r-- 1 root root 8.0M Jul 5 14:33 /etc/udev/-rw-r--r-- 1 root root 1.4M Jul 1 13:02 /etc/selinux/targeted/contexts/files/file_-rw-r--r-- 1 root root 3.8M Jul 1 13:02 /etc/selinux/targeted/policy/policy.31-rw------- 1 root root 3.8M Jul 1 13:02 /etc/selinux/targeted/active/-rw------- 1 root root 3.8M Jul 1 13:02 /etc/selinux/targeted/active/上⾯的例⼦证明find命令适⽤于查找出隐藏⽂件。例⼦2 :查找当前系统上没有属主或属组,且最近⼀个周内曾被访问过的⽂件或⽬录[root@iz2zed4h7bg5dihzfqhmn9z ~]# find / -nouser -o -nogroup -mtime -6例⼦3:查找/etc⽬录下⾄少有⼀类⽤户没有执⾏权限的⽂件[root@iz2zed4h7bg5dihzfqhmn9z ~]# find /etc/ ! -perm /111在接下来说说⽂件打包命令tar在linux中时长也需要进⾏压缩,解压缩等操作,那在linux中有哪些常⽤的压缩和解压缩的⼯具呢?gzip和gunzip格式: gzip [options] fileoptions -k keep, 保留原⽂件,CentOS 8 新特性-d 解压缩,相当于gunzip-c 结果输出⾄标准输出,保留原⽂件不改变-# 指定压缩⽐,#取值为1-9,值越⼤压缩⽐越⼤gunzip 解压缩bzip2和bunzip2格式:bizp2 [options] file-k keep, 保留原⽂件-d 解压缩-c 结果输出⾄标准输出,保留原⽂件不改变-# 1-9,压缩⽐,默认为9bunzip2 解压缩xz和unxz格式:xz [options] file-k keep, 保留原⽂件-d 解压缩-c 结果输出⾄标准输出,保留原⽂件不改变-# 压缩⽐,取值1-9,默认为6unxz 解压缩zip和unzip格式:zip [options] filezip 可以实现打包⽬录和多个⽂件成⼀个⽂件并压缩,但可能会丢失⽂件属性信息,如:所有者和组信息,⼀般建议使⽤ tar 代替-r 打包压缩⽂件夹-p 通过管道传给⽂件tar格式:tar [options] ..... ⽬标⽂件-c 建⽴新的打包⽂件-C 切换⼯作⽬录,先进⼊指定⽬录再执⾏压缩/解压缩操作,可⽤于仅压缩特定⽬录⾥的内容或解压缩到特定⽬录-x 从归档⽂件中提取⽂件-f 指定打包⽂件-v 显⽰指令执⾏过程-p 保留原来的⽂件权限与属性-- -remove-files 归档/压缩之后删除源⽂件-z 相当于gzip压缩⼯具-j 相当于bzip2压缩⼯具-J 相当于xz压缩⼯具例⼦4:打包/etc/⽬录下⾯所有conf结尾的⽂件,压缩包名称为当天的时间,并拷贝到/usr/local/src⽬录备份。[root@iz2zed4h7bg5dihzfqhmn9z src]# find /etc/ -name "*.conf" | xargs tar -cpvf `date +%F`.tar && cp -a `date +%F`.tar/usr/local/src/[root@iz2zed4h7bg5dihzfqhmn9z ~]# ll /usr/local/src/total 480-rw-r--r-- 1 root root 491520 Dec 25 14:55 上⾯⽤到了⼀个参数xargs,xargs⽤于产⽣某个命令的参数,xargs 可以读⼊ stdin 的数据,并且以空格符或回车符将 stdin 的数据分隔成为参数

发布者:admin,转转请注明出处:http://www.yc00.com/web/1691037681a492360.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信