您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

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

时间:2019-09-10 13:09:15  来源:  作者:

概述

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


方法要点

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

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

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

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

4.好记性不如烂键盘:有一句不好听的话虽然不好听,但是能提醒到一些正在学习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
详解Linux Shell脚本编写技巧,附实例说明

 


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 statusG" > /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
详解Linux Shell脚本编写技巧,附实例说明

 


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"
详解Linux Shell脚本编写技巧,附实例说明

 


4、统计内存使用

#!/bin/bash
#########################################
#计算一下linux系统所有进程占用内存大小的和
#########################################
count=0
# 这个循环会遍历出每个进程占用的内存大小
for i in `ps aux |awk '{print $6}' |grep -v 'RSS'`
do
 # 将遍历出来的数字进行累加
 count=$[$count+$i]
done
 
# 就得到所有进程占用内存大小的和了
echo "$count/kb"
详解Linux Shell脚本编写技巧,附实例说明


Tags:Linux Shell   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
在 shell 中使用 bc 更好地做算数,它是一种用于高级计算的数学语言。• 来源:linux.cn • 作者:Seth Kenlon • 译者:geekpi •(本文字数:1955,阅读时长大约:2 分...【详细内容】
2020-09-29  Tags: Linux Shell  点击:(134)  评论:(0)  加入收藏
本篇主要是以x64系统为例对系统调用中一些功能性函数的解读和实际运用。目前网络上流传的通用shellcode,均使用系统调用实现,在记录整个学习过程的同时分享给大家一起学习探讨...【详细内容】
2020-09-02  Tags: Linux Shell  点击:(75)  评论:(0)  加入收藏
1、单引号(' ')单引号所见即所得,直接显示单引号里的内容。即单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的。比如下面的例子,单引号所见即所得。 2、...【详细内容】
2020-08-03  Tags: Linux Shell  点击:(79)  评论:(0)  加入收藏
分享下处理数据分析时,linux shell 两个比较基础的工具sed 指令非交互式的字符流编辑器,支持对多文件多行的管道处理sed [option] 'command' f.txtsed -n '2,3p...【详细内容】
2020-07-24  Tags: Linux Shell  点击:(77)  评论:(0)  加入收藏
Linux为高级用户提供了一些最好的开源shell,我们冒昧地为Linux用户列出了一些最好的免费开源shell。请仔细阅读本文,找出最适合您的Linux shell。自从70年代Unix系统诞生以来,...【详细内容】
2020-05-04  Tags: Linux Shell  点击:(81)  评论:(0)  加入收藏
Linux为高级用户提供了一些最好的开源shell,我们冒昧地为Linux用户列出了一些最好的免费开源shell。请仔细阅读本文,找出最适合您的Linux shell。自从70年代Unix系统诞生以来,...【详细内容】
2020-05-04  Tags: Linux Shell  点击:(44)  评论:(0)  加入收藏
转自 | talkwithtrend作者 | db2haodbshell的逻辑运算符 涉及有以下几种类型,因此只要适当选择,可以解决我们很多复杂的判断,达到事半功倍效果。一、逻辑运算符1、逻辑卷标...【详细内容】
2019-12-17  Tags: Linux Shell  点击:(109)  评论:(0)  加入收藏
Linux 内置命令属于用户 shell 的一部分,本文将告诉你如何识别它们并获取使用它们的帮助。-- Sandra Henry-stocker(作者)Linux 内置命令是内置于 shell 中的命令,很像内置于墙...【详细内容】
2019-12-06  Tags: Linux Shell  点击:(94)  评论:(0)  加入收藏
Linux Shell是一种基本功,由于怪异的语法加之较差的可读性,通常被Python等脚本代替。既然是基本功,那就需要掌握,毕竟学习Shell脚本的过程中,还是能了解到很多Linux系统的内容。...【详细内容】
2019-10-25  Tags: Linux Shell  点击:(1121)  评论:(0)  加入收藏
前言有时候我们常看到类似这样的脚本调用:./test.sh > log.txt 2>&1 这里的2>&1是什么意思?该如何理解?先说结论:上面的调用表明将./test.sh的输出重定向到log.txt文件中,同时将...【详细内容】
2019-10-25  Tags: Linux Shell  点击:(145)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条