shell脚本学习笔记(三)—— if、xargs、awk
来源:互联网 发布:mac android sdk 路径 编辑:程序博客网 时间:2024/06/06 12:54
1 if语句
1.1 shell脚本中判断文件和目录是否存在
查看某目录是否存在,不存在就创建,存在就退出并打印提示。
if [ ! -d "$DIR" ]then mkdir -p "$DIR"else echo "存在目录${DIR},请查看其中内容,再做修改备份!" return# exit
-d参数是判断目录是否存在,-f参数则是判断文件是否存在。
/*执行如下命令: cd / cat -n .bash_profile会看见这么一段:*/if [ -f ~/.bashrc ]; then . ~/.bashrcfi
其中-f选项是判断这个文件是否存在,这里若该脚本文件存在就执行这个脚本。
if [ ! -f "$FILE" ]then touch "$FILE"fi
1.2 if test
if test判断执行脚本时输入的第一个参数,然后执行相应的操作修改数据库表的字段值,来打开或者关闭某批量。
if test "$1" = "-y"then db2 "update TBL_BAT_TASK_CTL set USE_FLAG='Y' where BAT_ID='0026'" db2 terminatefiif test "$1" = "-n"then db2 "update TBL_BAT_TASK_CTL set USE_FLAG='N' where BAT_ID='0026'" db2 terminamefi
2 find | xargs
2.1 基于find找到的文件进行指定的操作
-exec: 对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ {} \;,注意{}和\;之间的空格,同时两个{}之间没有空格。
#找到文件名为*.log, 同时文件数据修改时间距此时为1天之内的文件。如果找到就删除他们。find . -name "*.log" -mtime -1 -exec rm -f {} \;
-ok: 其主要功能和语法格式与-exec完全相同,唯一的差别是在于该选项更加安全,因为它会在每次执行shell命令之前均予以提示,只有在回答为y的时候, 其后的shell命令才会被继续执行。需要说明的是,该选项不适用于自动化脚本,因为该提供可能会挂起整个自动化流程。
2.2 xargs
该命令的主要功能是从输入中构建和执行shell命令。
在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。
find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高; 而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。
下面是打包压缩一源码文件时,先对拷贝过来的代码进行一些删除不必要的文件处理,再压缩。
find . -name "*.o"|xargs rm -ffind . -name "*.swp"|xargs rm -ffind . -name "*.swo"|xargs rm -ffind . -name "*.bak"|xargs rm -f
请参考:http://www.cnblogs.com/mchina/archive/2012/07/02/2573313.html
3 awk
和sed一样,awk也是逐行扫描文件的,从第一行到最后一行,寻找匹配特定模板的行,并在这些行上运行“选择”动作。如果一个模板没有指定动作,这些匹配的行就被显示在屏幕上。如果一个动作没有模板,所有被动作指定的行都被处理。
awk的基本格式:
awk ‘pattern’ filename
awk ‘{action}’ filename
awk ‘pattern {action}’ filename
awk还可以编程,含有与C一样的流程控制和各种运算语法。
下面是一段获取跑批日期并进行跑批的脚本:
#!/bin/bash#这里包含家目录下的.bash_profile配置脚本. $HOME/.bash_profiledate=`date +%Y%m%d `GetLastDate(){ TODAY=`date "+%Y %m %d"` LASTDATE=`echo $TODAY|awk \ '{ \ Year=$1; Month=$2; Day=$3; \ M[1]=31; M[2]=28; M[3]=31; M[4]=30; M[5]=31; M[6]=30; \ M[7]=31; M[8]=31; M[9]=30; M[10]=31; M[11]=30; M[12]=31; \ if (Year%4==0 && (Year%100!=0 || Year%400==0)) M[2]=29; \ else M[2]=28; \ if (Day-1==0) \ { \ if (Month-1==0) { Year-=1; Month=12; } \ else Month-=1; \ Day=M[Month]; \ } \ else Day-=1; \ printf("%04d%02d%02d", Year, Month, Day); \ }'`}GetLastDatebatinit 0001batrun $LASTDATE 0001
至于awk的详细使用见博客:
1、http://www.cnblogs.com/mchina/archive/2012/06/30/2571308.html
2、http://www.cnblogs.com/mchina/archive/2012/06/30/2571317.html
- shell脚本学习笔记(三)—— if、xargs、awk
- Shell脚本基础学习(三)----if-then控制
- Shell脚本写作:Awk学习笔记
- shell脚本学习笔记 (文本处理器AWK)
- shell学习——xargs
- SHELL学习笔记——awk编程
- shell 脚本学习 awk
- shell脚本之条件语句if和分支语句case...esac【shell脚本的学习笔记三】
- shell脚本--使用for if date awk
- Linux Shell 学习笔记 ---- xargs
- 【Shell】【学习笔记】Linux Shell脚本应用(三)
- Linux学习笔记(三)——Shell脚本基础总结
- Linux学习笔记(三)——Shell脚本基础总结
- Shell脚本学习笔记(七)--sed和awk
- Shell脚本学习笔记(七)--sed和awk
- Shell 脚本学习之awk
- Shell—AWK—脚本实例
- shell脚本知识(三) 正则表达式 grep sed awk
- Kubernetes 落地案例|将 Pokémon Go 运行到谷歌云上
- 测试java反射机制
- Qt中的多线程技术
- 【Android】屏幕自适应4种方法
- 日期差值——一种快速的求解方法(Hash的思想)
- shell脚本学习笔记(三)—— if、xargs、awk
- xxx is not in the sudoers file. This incident will be reported.
- SIFT特征提取分析
- CHROME插件
- Android 内存分析命令
- Linux_Shell 输出带颜色的字体(一) 利用tput
- 关于CSS中的块级元素以及行级元素
- Linux帮助命令和用户管理命令
- 第九周项目2- 对称矩阵压缩存储的实现与应用(2)