`
ginge
  • 浏览: 212077 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

从一个日志脚本看Bash Shell语法

阅读更多

脚本的作用

这个脚本的作用就是从一个文件里读取一个需要管理的所有log文件,并且读入一个数组。然后判断是否存在,如果不存在则忽略。如果存在将判断大小是否超过设定大小,如果超过则备份。

 

脚本内容

#!/bin/bash

##author:ginge

echo "logfiles to manage:"
logfiles=${1-./logfiles}
size=${2-100}

index=0;
#read the log file into the array
while read logfiles[$index]
  do
    echo "$index: ${logfiles[${index}]}"
    (( index +=1 ))
  done < $logfiles


i=0;
while [ $i -lt $index ]
  do
     logfile=${logfiles[$i]}

     (( i += 1 ))

     dir=${logfile%/*}
     if [ -z $logfile ] || [ ! -f $logfile ];then
       echo "$logfile doesn't exist. ignored."
       continue;
     fi

     echo "handling logfile: $logfile"
     echo "entering dir:$dir"
     cd $dir

     result="`find $logfile -size +${size}M`"
     if [ ! -z $result ]; then
       echo "backup $logfile..."
        cp $logfile $logfile".`date '+%G%m%d'`"
        : > $logfile
     else
        echo "it's not bigger than ${size} M"
     fi
     
  done

 

 

 

Shell类型声明

开头这里声明了使用bash

 

注释

SHELL的注释以#开头,可以从一行的任意位置开始

 

命令参数读取

注意到$1$2没有?这代表第一和第二个命令参数。其它的有$0$# $*$0代表当前shell$#代表参数个数,$*则代表所有参数

 

变量声明

脚本语言可以事先不变量,变量也是弱类型的,最近一次使用时是什么类型就是什么类型,变量区分大小写。

 

logfiles=${1-./logfiles}意思是如果存在第一个命令参数则使用它对logfiles赋值,如果不存在则赋值为./logfiles

 

 

变量引用

变量引用以$符号开始,严格点要使用${variable}形式

 

循环

支持for循环和while循环,也支持continuebreak

 

条件判断

shell里,通常使用test或者[]来作条件判断,可以判断的类型很多,如大小,文件是否存在,是否目录等等。

 

 

数组

新版Bash支持一维数组。数组元素的声明是array_name[xx]。你可以只初始化一部分数组元素,也可以全部初始化。也就是说可以

Array[0] =1

Array[1] =1

Array[2] =1

Array[3] =1

Array[10]=1

 

 

文件读取

使用一个<符就行了

 

变量计算

这里我们使用了(())语法,当然也可以使用let语法。

 

字符串操作

%{logfile%/*}表示最短截取,如果变量logfile当前的值为/vision/logs/app/app.log,那么截取后的值将是/vision/logs/app

 

 

 

执行命令

`` 这个`是跟~同一个键的那个符号,假如这样一个语句

Result=`date`

执行后echo $Result将是这样的Tue Jan  6 15:13:41 CST 2009

 

 

没有使用一些Shell命令有

l  IO重定向

l  Here Document

l  管道

l  进程

l  命令执行结果

l  函数

l  嵌套shell

l  等等

 

需要详细了解上述命令读以下资料就已经足够了

 

参考资料:

l  Advanced Bash-Scripting Guide version 3.7.3

l  Shell十三问

分享到:
评论
1 楼 ginge 2009-01-06  
对于Java之外的log,例如nohup起来的,或者其它操作系统日志就有用了。

相关推荐

    Learning the bash Shell

    《Learning the Bash Shell》是一本深受Linux用户喜爱的教程,主要针对Bash shell进行深入讲解。Bash(Bourne-Again SHell)是Linux操作系统中最常用的命令行解释器,它为用户提供了与系统交互的强大工具。这本书的...

    Bash shell编程参考手册

    - **Shell语法**:介绍Shell的基本操作规则,如命令行解析、变量引用、函数定义等。 - **引号使用**:用于防止Shell对字符串进行特殊字符解析,分为: - **转义字符**:`\"`、`\`等,用于表示其后的字符应按字面...

    linux learning the bash shell

    通过以上对标题、描述和部分内容的分析,我们可以看出《Linux Shell Scripting with Bash》这本书是一本非常全面且实用的学习资源,对于希望深入了解Bash Shell编程的读者来说具有极高的价值。无论是作为入门教材...

    linux bash shell中文手册

    8. **保留字 ("RESERVED WORDS")**:保留字是Shell语法中具有特殊含义的关键词,如`if`, `for`, `while`, `function`等,它们不能用作普通变量名。 9. **注释 (COMMENTS)**:解释如何在Shell脚本中添加注释,通常是...

    bash shell 源代码

    bash shell,全称为Bourne-Again SHell,是GNU项目的一部分,由自由软件基金会的创始人理查德·马修·斯托曼(Richard Stallman)发起,是Unix/Linux操作系统中最常用的命令行解释器。这个源代码包包含了bash 4.2...

    Bash shell脚本新手指南

    ### Bash Shell 脚本新手指南关键知识点解析 #### 一、Bash Shell 概述与优势 **1.1 常用Shell程序** - **Shell 的普遍作用:** - 解释用户的命令(直接输入或从Shell脚本文件读取)。 - Shell脚本是解释型而非...

    bash shell 基础编程语法

    ### bash shell 基础编程语法 #### 一、bash shell 概述 **Shell**是一种用户与操作系统之间交互的接口。在用户登录系统后,`init`进程会为每位用户运行一个称为“shell”的程序。Linux下的shell并非只有单一形式...

    bash,shell模版 语法 设置文件

    **二、Bash Shell语法** 1. **变量**:在Bash中,变量用于存储数据。声明变量时无需指定类型,如`VAR_NAME=value`。引用变量时,需在其前加上 `$` 符号,如`echo $VAR_NAME`。 2. **命令行参数**:脚本可以通过...

    高级Bash Shell脚本编程指南

    毫无疑问,UNIX/Linux 最重要的软件之一就是shell,目前最流行的shell 被称为Bash(Bourne AgainShell),几乎所有的Linux 和绝大部分的UNIX 都可以使用Bash。作为系统与用户之间的交互接口,shell几乎是你在UNIX 工作...

    shell编程 创建shell脚本 shell 基础语法 shell流程控制语法 shell函数

    Shell 脚本是 Linux 系统中进行自动化任务处理的一种强大工具。下面将详细介绍创建 Shell 脚本、Shell 基础语法、流程控制语法以及如何定义和使用 Shell 函数。 首先,让我们理解一下 Shell 编程的基础。Shell 是...

    Shell脚本学习教程PDF版

    在“Shell脚本学习教程PDF版”中,你将深入理解Shell脚本的基本概念、语法结构以及高级特性。 首先,Shell脚本的基础包括变量、条件语句、循环结构和函数。变量是存储数据的地方,可以是文本、数字或者其他类型。在...

    《Learning the bash Shell,3rd Edition,by Cameron Newham》.pdf

    - 讨论shell语法中的特殊字符及其用法。 - **1.10 帮助** - 提供获取bash帮助的方法,包括内置命令的帮助文档。 2. **第2章:命令行编辑** - **2.1 启用命令行编辑** - 介绍如何启用bash的命令行编辑功能。 -...

    Linux Bash Shell快速入门

    Linux Bash Shell快速入门是针对初学者的指导性文章,它从编写简单的“Hello World”程序开始,逐步介绍Bash Shell的基础知识和语法。本文重点讨论了以下几个方面:Bash Shell的基本语法,变量的使用和与C语言的异同...

    详解shell中source、sh、bash、./执行脚本的区别

    在Linux和Unix操作系统中,Shell脚本是一种强大的自动化工具,用于编写执行一系列命令的文件。在不同的场景下,我们可能需要使用不同的方式来执行这些脚本。本文将深入解析`source`、`sh`、`bash`以及`.`/`执行脚本...

    bash shell

    综上所述,Bash Shell 不仅是 Linux 和 MacOS 下的核心工具之一,也是进行脚本编程的强大工具。掌握了 Bash Shell 的基础知识和高级特性,不仅可以提高日常的工作效率,还能帮助解决各种复杂的系统管理和自动化任务...

    BASH SHELL程序设计简介

    BASH Shell编程是Linux系统中一个重要的组成部分,它不仅能够帮助用户实现自动化脚本编写,还能有效提高日常工作效率。本文将详细介绍BASH Shell编程的基础知识,适合初次接触Linux系统的程序员学习。 #### 二、...

Global site tag (gtag.js) - Google Analytics