函数及脚本的综合应用

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

函数及脚本的综合应用相关推荐

  1. shell中的函数及脚本调试方法

    1.函数格式 目的:将一些相对对立的代码变成函数,提供可读性和重用性,避免重复编写相同代码. 函数格式: 函数关键字:function可以省略,可不带任何参数; 符号{表示函数体的开始(可在函数名后单 ...

  2. ABP学习 解决:Update-Database : 无法将“Update-Database”项识别为 cmdlet、函数、脚本文件或可运行程序的名称的问题

    ABP学习 解决:Update-Database : 无法将"Update-Database"项识别为 cmdlet.函数.脚本文件或可运行程序的名称的问题 参考文章: (1)AB ...

  3. ubuntu:无法将“ubuntu1804.exe”项识别为cmdlet、函数、脚本文件或可运行程序的名称。【已解决】

    出现问题:无法将"ubuntu1804.exe"项识别为cmdlet.函数.脚本文件或可运行程序的名称. 解决办法: 第一步  进入此目录下查看是否有"ubuntu180 ...

  4. 解决vue: 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称...

    我是用yarn安装的vue脚手架(yarn global add @vue/cli),yarn提示安装成功后,运行了下vue --version,结果报错. vue : 无法将"vue&qu ...

  5. '无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称' 或 'vue不是内部或外部命令' 的解决方法...

    如果在使用 vue 初始化项目的时候提示: vue : 无法将"vue"项识别为 cmdlet.函数.脚本文件或可运行程序的名称.请检查名称的拼写,如果包括路径,请确保路径正确,然 ...

  6. tensorboard : 无法将“tensorboard”项识别为 cmdlet、函数、脚本文件或可运行 程序的名称。

    tensorboard可视化建模 tensorboard : 无法将"tensorboard"项识别为 cmdlet.函数.脚本文件或可运行 程序的名称.请检查名称的拼写,如果包括 ...

  7. vue : 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确, 然后再试一次。

    vue : 无法将"vue"项识别为 cmdlet.函数.脚本文件或可运行程序的名称.请检查名称的拼写,如果包括路径,请确保路径正确, 然后再试一次. 报错原因: 没有安装脚手架v ...

  8. yarn的配置 -- 无法将“yo”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

    yo : 无法将"yo"项识别为 cmdlet.函数.脚本文件或可运行程序的名称.请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次. 在这里以 yarn 安装 yeom ...

  9. 解决VScode安装Babel转码器报错:无法将“cnpm“项识别为cmdlet\函数、脚本文件或可运行程序的名称的问题

    解决VScode安装Babel转码器报错:无法将"cnpm"项识别为cmdlet\函数.脚本文件或可运行程序的名称的问题 报错结果如下: 解决方案 第一步:安装npm 点我安装np ...

最新文章

  1. 读书笔记2013第10本:《学得少却考得好Learn More Study Less》
  2. 盛大 Everbox同步网盘,可以本地和云服务文件同步,还不错,推荐下面的注册地址...
  3. I/O多路转接之 select
  4. 解决软件安装中出现checking for FUSE... no方法一例
  5. python sort 多级排序_sort、sorted排序技巧(多级排序)
  6. PHP安装zip拓展,以及libzip安装问题
  7. SpringBoot_日志-SpringBoot日志关系
  8. Android之如何判断当前是阿拉伯布局的方法
  9. Spring面试题(第一期)
  10. MySQL水平分区代理Spock Proxy(一)
  11. TensorFlow: 薛定谔的管道
  12. Linux命令详解-mkdir
  13. Android现学现用第十二天
  14. 模型房推荐_艺术生意大利留学,关于费用开销和专业推荐,这些详情要看
  15. 学习累了吗,来听听乔布斯的演讲吧!
  16. openstack是啥子
  17. 简述oracle的日志缓冲区,2.4 重做日志缓冲区
  18. ShanaEncoder 官网链接
  19. 婚车租赁APP开发源码部署
  20. SQl 固定日期 年、月、日(加,减 1)

热门文章

  1. 关于MongoDB时区问题
  2. 【数据库】使用PLSQL工具时,ORACLE客户端连接串的配置
  3. shell 脚本批量安装perl包
  4. 【Log4j】Jboss下配置log4j简记
  5. python基础===字符串的制表,换行基础操作
  6. “OpAfrica”行动:匿名者攻击南非武器采购机构
  7. HashTable、HashSet和Dictionary的区别
  8. Oracle新建用户、角色,授权,建表空间
  9. PhoneGap开发环境搭建
  10. SQL SERVER 2008的错误日志太大