当前位置: 首页 > 科技观察

LinuxShell脚本技巧详解,举例说明

时间:2023-03-12 03:10:30 科技观察

LinuxShell是一个难点的知识板块。虽然每个人都努力学习,掌握了基本语法,但很难在有需要的时候直接开始编程。要么写了很久,要么写不好!对于初学者来说,由于没有实践经验,是不会写Shell脚本的。这是正常的。如果你工作了几年还是写不出运维,说明你没有主动去发现需求,缺乏实践,缺乏经验。方法要点简单介绍一下编写shell脚本时的经验和方法。理清思路:当我们要实现一个功能需要写脚本的时候,一定不能想都没想就写,要避免先写命令,需要什么功能的时候再改进。这种写法往往存在结构上难以调整的问题。在我们开始编写脚本之前,我们必须事先弄清楚如何实现这个功能,包括使用什么命令以及命令的顺序。总体看法:我们梳理好剧本的思路后,还不能马上开始写。这时候,我们需要在脑海中思考每一步可能出现的情况,出现各种情况时应该如何应对。在shell脚本中,我们有可能实现一个看似简单的需要多个条件判断的功能,因为我们当前系统出现的情况只是众多情况中的一种,我们要让脚本运行在任意一台机器上即可能够正常运作,必须要有“全局观”。通俗地说,就是一个消除bug的过程。细心如丝:正如大家所感叹的,shell脚本有很多引号、括号、空格,每一个都有不同的含义,多空格和少空格的含义也不一样。写一个几十行的shell脚本一下子就可以写完了。不报错运行还是有一定难度的。在学习shell脚本的时候,我强迫自己养成了每写完一行就检查各种符号和括号的习惯。一开始速度很慢,但是随着我写的越多,速度越快,错误率也越低。越来越低了,等你习惯了写那些符号,就成了习惯,就没有开始那么痛苦了。好记性不如坏键盘:虽然有个坏词听起来不好听,但提醒一些正在学习shellscript的朋友说出来还是不错的。当你在抱怨shell脚本有多难,多容易出错时,你总共写了多少行shell?你在键盘上打了多少次?下面是一些用于练习的shell脚本示例。1、检测服务器是否开启web服务(监听80),判断服务类型#!/bin/bash########################################################检测服务器是否开启web服务(监听80),判断服务类型#####################################################抓取监听80端口的服务namenetstat-lntp|grep":80"|awk-F'/''{print$2}'|sort|uniq>/tmp/80.logn=`wc-l/tmp/80.log|awk'{print$1}'`s1=`cat/tmp/80.log`#判断服务类型函数judge_server(){case$1inhttpd)echo"thisserverisapache";;nginx)echo"thisserverisnginx";;tomcat)echo"thisserveristomcat";;*)echo"此服务器是其他服务器";;esac}if[$n-eq0]thenecho"nowebserver!".检测MySQL服务是否正常,判断是主库还是从库,如果是从库,判断主从服务是否正常#!/bin/bash######################################################################检测MySQL服务是否正常,判断是主库还是从库,如果是从库,判断主从服务是否正常#####################################################################mysqlcmd="mysql-uroot-p123456"#判断MySQL服务是否正常(正确执行mysql命令)$mysqlcmd-e"showprocesslist"if[$?-gt0]thenecho"thismysqliswrong."else#如果是从库,有返回值$mysqlcmd-e"showslavestatus\G">/tmp/sql.logn=`wc-l/tmp/sql.log|awk'{print$1}'`if[$n-gt0]theny1=`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"]thenecho"theslaveisok"elseecho"theslaveiswrong"fififi3.计算100以内所有能被3整除的正整数之和#!/bin/bash#################################################计算100以内所有能被3整除的数的正整数之和##############################################sum=0foriin{1..100}do#求余数n=$[$i%3]if[$n-eq0]thensum=$[$sum+$i]fidoneecho"sum:$sum"4.统计内存使用情况#!/bin/bash##################################################计算100以内所有能被3整除的正整数之和#############################################sum=0foriin{1..100}do#求余数n=$[$i%3]if[$n-eq0]thensum=$[$sum+$i]fidoneecho"sum:$sum"