函数及脚本的综合应用
函数及脚本的综合应用
1、shell函数:shell允许将一组命令集或语句形成一个可用块,这些块称为shell函数。
函数由两部分组成:函数标题、函数体。
标题是函数名。函数体是函数内的命令集合。
标题名应该唯一;如果不是,将会混淆结果,因为脚本在查看调用脚本前将首先搜索函数调用相应的shell。
2、定义函数的格式为:
函数名(){
命令1
...
}
如果愿意,可在函数名前加上关键字function,这取决于使用者。
function函数名()
{
命令1
...
}
3、举例:
例1:删除文件中的空行
这个脚本(脚本名为del.lines)可以处理一个或多个文件。每个文件在用sed删除空行之前要先核实是否存在。
sed的输出被导入一个文件名中含有$ $的临时文件,最后这个临时文件又被移回到原来的文件中。
该脚本使用shift命令取得所有的文件名,用while循环逐个处理所有的文件,直至处理完
为止。可以使用del.lines --help获得一个简短的帮助
保存后给脚本文件增加执行权限:chmod +x del.lines
执行脚本进行测试:
注:
1、basename命令能够从路径中分离出文件名。通常用于shell脚本中
2、shift语句用于迁移位置变量,将 $1~$9 依次向左传递
例如,若当前脚本程序获得的位置变量如下:
$1=file1、$2=file2、$3=file3、$4=file4
则执行一次shift命令后,各位置变量为:
$1=file2、$2=file3、$3=file4
再次执行shift命令后,各位置变量为:
$1=file3、$2=file4
例2:如果某些日志文件超过了特定的长度(如8K),那么它的内容将被倒换到另一个文件中,并清除原有文件中的内容.
系统中的有些日志文件增长十分迅速,每天手工检查这些日志文件的长度并倒换这些日志文件(通常是给文件名加个时间戳)是非常乏味的。可以编写一个脚本来自动完成这项工作。该脚本将提交给cron进程来运行,如果某个日志文件超过了特定的长度,那么它的内容将被倒换到另一个文件中,并清除原有文件中的内容。
该脚本中日志文件的长度限制是由变量BLOCK_LIMIT设定的。这一数字代表了块数目,在本例中是8(块大小默认为4K)。可以按照自己的需求把这一数字设得更高。所有要检查的日志文件名都保存在变量LOGS中。
这里使用了一个for循环来依次检查每一个日志文件,使用du命令来获取日志文件长度。
如果相应的文件长度大于BLOCK_LIMIT变量所规定的值,那么该文件将被拷贝到一个文件
名含有时间戳的文件中,原先的文件长度将被截断为0。
注:du 并不是显示文件的实际大小,而是显示文件所占用的 block 大小,默认linux系统分区的 block size 是4k,也就是说即使文件只有1个字节,也会占用4k.
ls -l则是文件的实际大小。
转载于:https://blog.51cto.com/xiaobai1981/1737437
函数及脚本的综合应用相关推荐
- shell中的函数及脚本调试方法
1.函数格式 目的:将一些相对对立的代码变成函数,提供可读性和重用性,避免重复编写相同代码. 函数格式: 函数关键字:function可以省略,可不带任何参数; 符号{表示函数体的开始(可在函数名后单 ...
- ABP学习 解决:Update-Database : 无法将“Update-Database”项识别为 cmdlet、函数、脚本文件或可运行程序的名称的问题
ABP学习 解决:Update-Database : 无法将"Update-Database"项识别为 cmdlet.函数.脚本文件或可运行程序的名称的问题 参考文章: (1)AB ...
- ubuntu:无法将“ubuntu1804.exe”项识别为cmdlet、函数、脚本文件或可运行程序的名称。【已解决】
出现问题:无法将"ubuntu1804.exe"项识别为cmdlet.函数.脚本文件或可运行程序的名称. 解决办法: 第一步 进入此目录下查看是否有"ubuntu180 ...
- 解决vue: 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称...
我是用yarn安装的vue脚手架(yarn global add @vue/cli),yarn提示安装成功后,运行了下vue --version,结果报错. vue : 无法将"vue&qu ...
- '无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称' 或 'vue不是内部或外部命令' 的解决方法...
如果在使用 vue 初始化项目的时候提示: vue : 无法将"vue"项识别为 cmdlet.函数.脚本文件或可运行程序的名称.请检查名称的拼写,如果包括路径,请确保路径正确,然 ...
- tensorboard : 无法将“tensorboard”项识别为 cmdlet、函数、脚本文件或可运行 程序的名称。
tensorboard可视化建模 tensorboard : 无法将"tensorboard"项识别为 cmdlet.函数.脚本文件或可运行 程序的名称.请检查名称的拼写,如果包括 ...
- vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确, 然后再试一次。
vue : 无法将"vue"项识别为 cmdlet.函数.脚本文件或可运行程序的名称.请检查名称的拼写,如果包括路径,请确保路径正确, 然后再试一次. 报错原因: 没有安装脚手架v ...
- yarn的配置 -- 无法将“yo”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
yo : 无法将"yo"项识别为 cmdlet.函数.脚本文件或可运行程序的名称.请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次. 在这里以 yarn 安装 yeom ...
- 解决VScode安装Babel转码器报错:无法将“cnpm“项识别为cmdlet\函数、脚本文件或可运行程序的名称的问题
解决VScode安装Babel转码器报错:无法将"cnpm"项识别为cmdlet\函数.脚本文件或可运行程序的名称的问题 报错结果如下: 解决方案 第一步:安装npm 点我安装np ...
最新文章
- 读书笔记2013第10本:《学得少却考得好Learn More Study Less》
- 盛大 Everbox同步网盘,可以本地和云服务文件同步,还不错,推荐下面的注册地址...
- I/O多路转接之 select
- 解决软件安装中出现checking for FUSE... no方法一例
- python sort 多级排序_sort、sorted排序技巧(多级排序)
- PHP安装zip拓展,以及libzip安装问题
- SpringBoot_日志-SpringBoot日志关系
- Android之如何判断当前是阿拉伯布局的方法
- Spring面试题(第一期)
- MySQL水平分区代理Spock Proxy(一)
- TensorFlow: 薛定谔的管道
- Linux命令详解-mkdir
- Android现学现用第十二天
- 模型房推荐_艺术生意大利留学,关于费用开销和专业推荐,这些详情要看
- 学习累了吗,来听听乔布斯的演讲吧!
- openstack是啥子
- 简述oracle的日志缓冲区,2.4 重做日志缓冲区
- ShanaEncoder 官网链接
- 婚车租赁APP开发源码部署
- SQl 固定日期 年、月、日(加,减 1)