Linux Shell 编程一.doc_第1页
Linux Shell 编程一.doc_第2页
Linux Shell 编程一.doc_第3页
Linux Shell 编程一.doc_第4页
Linux Shell 编程一.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux Shell 编程一一 变量,数组二 if, while, until, for, case,三 function四 test, , (), , , $()五 |, , stdin stdout stderr六正则脚本示例#!/bin/bash# =# RAID health plugin for Nagios# Written by : Roland# Release : 1.0.0# Creation date : 2010-06-10# Revision date : 2010-06-10# Description : Nagios plugin (script) to check RAID health .# This script has been designed and written on Linux System.# USAGE : ./check_raid_health.sh -d (raid num)# Exemple: ./check_raid_stats.sh# ./check_raid_stats.sh -d raid1# HISTORY :# Release | Date | Authors | Description# -+-+-+-# 1.0.0 | 2010-06-10 | Roland | Create the script# -# NOTICE:#-# You should have the root Permissions ,You can use sudo to realize .# - # Nagios return codes# 定义 nagios返回的状态变量STATE_OK=0STATE_WARNING=1STATE_CRITICAL=2STATE_UNKNOWN=3 # Paths to commands used in this script. These may have to be modified to match your system setup.# 定义关键的核心命令MegaCli 路径。#MEAGCLI=/root/MegaCli -AdpAllInfo -aALL |egrep Degrade|Failed Disks|Offline|egrep -v No|Yes# Plugin parameters value if not define# 定义默认的检测RAIDCHECK_RAID=raid1 # Plugin variable description# 插件定义此插件脚本的描述信息PROGNAME=$(basename $0)RELEASE=Revision 1.0.0AUTHOR=(c) 2010 Roland (R) # Functions plugin usage# 插件的使用方法函数print_release() echo $RELEASE $AUTHOR print_usage() echo echo $PROGNAME $RELEASE - RAID health check script for Nagiosecho echo Usage: check_raid_health.sh -d raid1echo echo -d the RAID (raid num) echo -v check the versionecho -h Show this pageecho echo Usage: $PROGNAMEecho Usage: $PROGNAME -helpecho exit 0 print_help() print_usageecho echo This plugin will check disk health echo exit 0 # Parse parameters# 传递参数while $# -gt 0 docase $1 in -h | -help) print_help exit $STATE_OK ; -v | -version) print_release exit $STATE_OK ; -d | -disk) shift CHECK_RAID=$1 # 判断磁盘是否存在if $1 = thenecho Please specify RAID number print_usageexit $STATE_UNKNOWNfi ; *) echo Unknown argument: $1 print_usage exit $STATE_UNKNOWN ;esacshiftdone # 根据不同的操作系统进行不同的操作,暂时只支持Linuxcase uname in Linux ) # 以下是脚本的核心程序/root/shell/MegaCli -AdpAllInfo -aALL |egrep Degrade|Failed Disks|Offline|egrep -v No|Yes statusrm -f status.tmpnum=cat status | wc -lif $CHECK_RAID = raid1 & $num -ge 3 thencat status | head -n3 status.tmpfiif $CHECK_RAID = raid2 & $num -ge 6 thencat status | head -n6 | tail -n3 status.tmpfiif $CHECK_RAID = raid3 & $num -ge 9 thencat status | head -n9 | tail -n3 status.tmpfiif ! -f status.tmp thenecho UNKNOWN - $CHECK_RAID status is not existexit $STATE_UNKNOWNfi deg=cat status.tmp | grep Degraded | awk -F : print $NF | cut -c2off=cat status.tmp | grep Offline | awk -F : print $NF | cut -c2fd=cat status.tmp | grep Failed Disks | awk -F : print $NF | cut -c2if $deg = | $off = | $fd = thenecho UNKNOWN - $CHECK_RAID status is cat status.tmp | xargsexit $STATE_UNKNOWNfiif $deg = 0 & $off = 0 & $fd = 0 thenecho OK - $CHECK_RAID status is cat status.tmp | xargsexit $STATE_OKelseif $fd != 0 thenecho CRITICAL - $CHECK_RAID status is cat status.tmp | xargsexit $STATE_CRITICALfiif $off != 0 thenecho WARNING - $CHECK_RAID status is cat status.tmp | xargsexit $STATE_WARNINGfiif $deg != 0 thenecho WARNING - $CHECK_RAID status is cat status.tmp | xargsexit $STATE_WARNINGfifi ; *) echo UNKNOWN: uname not yet supported by this plugin. Coming soon ! exit $STATE_UNKNOWN ;esac测试的标志 代表意义 1. 关于文件/目录类型检查(存在与否),如 test -e filename -e 该档名是否存在?(常用) -f 该档名是否为档案(file)?(常用) -d 该文件名是否为目录(directory)?(常用) -b 该文件名是否为一个 block device 装置? -c 该文件名是否为一个 character device 装置? -S 该档名是否为一个 Socket 档案? -p 该档名是否为一个 FIFO (pipe) 档案? -L 该档名是否为一个连结档? 2. 关于权限检查,如 test -r filename -r 侦测该文件名是否具有可读的属性? -w 侦测该档名是否具有可写的属性? -x 侦测该档名是否具有可执行的属性? -u 侦测该文件名是否具有SUID的属性? -g 侦测该文件名是否具有SGID的属性? -k 侦测该文件名是否具有Sticky bit的属性? -s 侦测该档名是否为非空白档案? 3. 两个文件之间的比较,如: test file1 -nt file2 -nt (newer than)判断 file1 是否比 file2 新 -ot (older than)判断 file1 是否比 file2 旧 -ef 判断 file2 与 file2 是否为同一档案,可用在判断 hard link 的判定上。 主要意义在判定,两个档案是否均指向同一个 inode 哩! 4. 关于两个整数之间的判定,例如 test n1 -eq n2 -eq 两数值相等 (equal) -ne 两数值不等 (not equal) -gt n1 大于 n2 (greater than) -lt n1 小于 n2 (less than) -ge n1 大于等于 n2 (greater than or equal) -le n1 小于等于 n2 (less than or equal) 5. 判定字符串的数据 test -z string 判定字符串是否为 0 ?若 string 为空字符串,则为 true test -n string 判定字符串是否非为 0 ?若 string 为空字符串,则为 false。 注: -n 亦可省略 test str1 = str2 判定 str1 是否等于 str2 ,若相等,则回传 true test str1 != str2 判定 str1 是否不等于 str2 ,若相等,则回传 false 6. 多重条件判定,例如:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论