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

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

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

9578420c7b03cb4498b3b586f10a9de9.png

方法要点

简单介绍一下编写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

d98cc41ef4874ea6f80cd75239fe8be7.png

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

b878636ac7c3232c656ad595d0b1d669.png

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"

ef8eded262cfd7dd3cd48714a6372efc.png

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"

责任编辑:

1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh   符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。   当编辑好脚本时,如果要执行该脚本,还必须使其可执行。   要使脚本可执行: 编译 chmod +x filename 这样才能用./filename 来运行 1.1.2 注释   在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。   如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。 1.1.3 变量   在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写: #!/bin/sh #对变量赋值: a="hello world" # 现在打印变量a的内容: echo "A is:" echo $a 有时候变量名很容易与其他文字混淆,比如: num=2 echo "this is the $numnd" 这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量: 网管u家u.bitsCN.com num=2 echo "this is the ${num}nd"   这将打印: this is the 2nd 1.1.4 环境变量 由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。 1.1.5 Shell命令和流程控制 在shell脚本中可以使用三类命令:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值