原标题:详解Linux Shell脚本编写技巧,附实例说明

Linux Shell是一个很难的知识板块。虽然大家都认真学,基本的语法很都掌握,但有需求时,很难直接上手编程,要么写了很久,要么写不好!对于初学者而言,因为没有实战经验,写不出来Shell脚本很正常,如果工作了几年的运维还是写不出来,那就是没主动找需求,缺乏练习,缺乏经验。

方法要点

简单介绍一下编写shell脚本的时候的经验和方法。

理清思路:在我们想实现一个功能需要写脚本的时候是切忌不要想到就写,避免需要什么功能就先写个什么命令再去完善,这种写法常常会出现在结构上很难调整的问题。在我们开始写脚本之前一定要事先理清楚要怎么去实现这个功能,包括用什么命令和命令的先后顺序。

全局观:当我们理清脚本的思路之后,我们这个时候也不能马上就开始写,这个时候我们需要在脑海中思考每一个步骤中可能出现的情况,当出现各种情况后如何应对。在shell脚本中有可能我们要实现一个看似简单的功能会需要有多个条件判断,因为出现在我们当前系统上的情况只是在众多情况中的一种,我们要实现让脚本在任何机器上都能正常运行就必须有“全局观”。通俗讲就是一个排除bug的过程。

心细如丝:正如大家感慨的一样,shell脚本有非常多的引号括号空格,每一种意义不一样,多个空格少个空格意义又不一样,写个几十行的shell脚本能一次性写完就无错运行还是有一些难度的。我的在学习shell脚本一开始就强行给自己养成一个习惯,每写完一行就检查一次各种符号括号,刚开始速度非常慢,但是写得多了速度就越来越快而且出错率也越来越低,当养成习惯以后再去写那些符号就成了习惯没有刚开始那么痛苦了。

好记性不如烂键盘:有一句不好听的话虽然不好听,但是能提醒到一些正在学习shell脚本的朋友说出来也挺好。当你在抱怨shell脚本如何难写如何易出错的时候那么你总共写过多少行shell?你敲过多少次键盘?

下面分享几个shell脚本实例做练习。

1. 检测服务器是否开启web服务(监听80),并判断服务种类

#!/bin/bash

####################################################

#检测服务器是否开启web服务(监听80),并判断服务种类

####################################################

#捕获监听80端口的服务名称

netstat -lntp|grep ":80"|awk -F '/' '{print $2}'|sort|uniq > /tmp/80.log

n=`wc -l /tmp/80.log|awk '{print $1}'`

s1=`cat /tmp/80.log`

#判断服务种类函数

judge_server()

{

case $1 in

httpd)

echo "this server is apache"

;;

nginx)

echo "this server is nginx"

;;

tomcat)

echo "this server is tomcat"

;;

*)

echo "this server is other"

;;

esac

}

if [ $n -eq 0 ]

then

echo "no web server!"

exit

fi

if [ $n -eq 1 ]

then

judge_server $s1

else

echo "there are $n web servers"

for web in `cat /tmp/80.log`

judge_server $web

fi

2. 检测MySQL服务是否正常,判断是主库还是从库,如是从库判断主从服务是否正常

#!/bin/bash

##################################################################

#检测MySQL服务是否正常,判断是主库还是从库,如是从库判断主从服务是否正常

##################################################################

mysqlcmd="mysql -uroot -p123456"

#判断MySQL服务是否正常(正确执行MySQL命令)

$mysqlcmd -e "show processlist"

if [ $? -gt 0 ]

then

echo "this mysql is wrong."

else

#如果是从库则有返回值

$mysqlcmd -e "show slave status\G" > /tmp/sql.log

n=`wc -l /tmp/sql.log|awk '{print $1}'`

if [ $n -gt 0 ]

then

y1=`grep 'Slave_IO_Running:' /tmp/sql.log`|awk -F ':' '{print $2}'|sed 's/ //g'`

y2=`grep 'Slave_SQL_Running:' /tmp/sql.log`|awk -F ':' '{print $2}'|sed 's/ //g'`

if [ $y1 == "yes" ] && [ $y2 == "yes" ]

then

echo "the slave is ok"

else

echo "the slave is wrong"

fi

fi

fi

3. 计算100以内所有能被3整除的正整数的和

#!/bin/bash

#############################################

#计算100以内所有能被3整除的正整数的和

############################################

sum=0

for i in {1..100}

do

#求余数

n=$[$i%3]

if [ $n -eq 0 ]

then

sum=$[$sum+$i]

fi

done

echo "sum:$sum"

4. 统计内存使用

#!/bin/bash

#############################################

#计算100以内所有能被3整除的正整数的和

############################################

sum=0

for i in {1..100}

do

#求余数

n=$[$i%3]

if [ $n -eq 0 ]

then

sum=$[$sum+$i]

fi

done

echo "sum:$sum"

责任编辑:

Linux编写脚本nsum求和,详解Linux Shell脚本编写技巧,附实例说明相关推荐

  1. linux下sort命令使用详解---linux将文本文件内容加以排序命令

    转载自:http://www.cnblogs.com/hitwtx/archive/2011/12/03/2274592.html linux下sort命令使用详解---linux将文本文件内容加以排 ...

  2. linux下测试ftp传输,linux下ftp命令使用详解---linux文件传输ftp命令

    linux下ftp命令使用详解---linux文件传输ftp命令 上一篇 / 下一篇  2010-12-18 09:15:35 / 个人分类:Linux ftp(file transfer proto ...

  3. Linux初始化内存盘黑屏,详解linux内存磁盘初始化技术.doc

    详解linux内存磁盘初始化技术 详解linux内存磁盘初始化技术 /5502266.html 关键词: HYPERLINK "/tag/initrd" \n _blankinit ...

  4. linux中用zip压缩文件,详解Linux中zip压缩和unzip解压缩命令及使用详解

    下面给大家介绍下Linux中zip压缩和unzip解压缩命令详解 1.把/home目录下面的mydata目录压缩为mydata.zip zip -r mydata.zip mydata #压缩myda ...

  5. linux 服务器拦截http请求,详解Linux屏蔽浏览器上http请求警报的方法

    众所周知,在Linux系统中浏览器的页面上是不允许出现http请求的,如果出现了http请求就会发生错误,并且Linux系统会向用户发出警报.下面,U大侠小编就给大家详解Linux屏蔽浏览器上http ...

  6. linux用户密码管理,Linux_详解Linux中的用户密码管理命令passwd和change,passwd 修改用户密码参数 nbsp - phpStudy...

    详解Linux中的用户密码管理命令passwd和change passwd 修改用户密码 参数 -k 保持未过期身份验证令牌 -l 关闭账号密码.效果相当于usermod -L,只有root才有权使用 ...

  7. linux上传文件put,详解Linux ftp 命令行中下载文件get与上传文件put的操作方法

    尽管现在有许多好的FTP应用程序,但服务器命令行ftp命令的应用程序仍然很多,下面就让电脑乐园小编带你一起来学习详解Linux ftp 命令行中下载文件get与上传文件put的操作方法. 介绍:从本地 ...

  8. linux系统中shell脚本最全详解二shell条件判断语法介绍函数分析

    目录 一.shell判断句 1.if条件判断语句 2.test判断 二.语法介绍 1.shell运算符 2.shell循环语句 三.shell函数 一.shell判断句 1.if条件判断语句 if语法 ...

  9. Linux中光盘使用的文件类型,linux下mount命令使用详解---linux挂载光盘等文件系统...

    mount 命令详解 功能:加载指定的文件系统. 语法:mount [-afFhnrvVw] [-L标签] [-o选项] [-t文件系统类型] [设备名] [加载点] 用法说明:mount可将指定设备 ...

最新文章

  1. C#方法中的反射方式和委托方式(小实例)
  2. JavaWeb学习笔记九 过滤器、注解
  3. sqlite数据类型、关键词及创建、修改、删除数据表
  4. pycharm运行程序时看不到任何结果显示
  5. vue隐藏浏览器_一分钟学会Vue的条件渲染和列表渲染
  6. C++友元函数简单示例
  7. 远程办公绝非远程监控,该如何挖掘远程办公的红利?
  8. sql语句分析是否走索引_mysql sql语句执行时是否使用索引检查方法
  9. c语言毕业论文,关于c语言的毕业论文题目[word文档]
  10. 计算机基础知识整理--概述
  11. 机器学习(三):一文读懂线性判别分析(LDA)
  12. 实验吧 Guess Next Session
  13. 计算机输入设备的作用,认识计算机输入设备—键盘
  14. python是什么意思中文、好学吗-零基础学python难吗?好学吗?
  15. 带你轻松玩转“高颜值”3D图表
  16. Linux下的Makefile编写与优化
  17. 数据扩增python实现
  18. Java ASCII编码表和运算符
  19. 从异构软件开发者的角度看异构计算
  20. 深度学习与计算机视觉-6章 Python-OpenCV

热门文章

  1. 《天下无贼》经典语录
  2. 惠普HP DeskJet 2755 一体机驱动
  3. python docx模块pip安装_pip安装python模块方法
  4. 人工智能——知识表示(部分)
  5. Ajax结果提取(page更新为使用since_id的解决方法)
  6. 【Python】切割PDF文件,遇到 PdfReadError: File has not been decrypted
  7. 【IoT】NFC 卡片类型浅析
  8. WiFi定频操作二:TX测试-rtwpriv-----WWIFI5G测试指令
  9. 小白自学笔记——JAVA基础 0.1Java语言概述
  10. 基本计算机视觉概念,视觉计算基础:计算机视觉、图形学和图像处理的核心概念简介,目录书摘...