应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

shell语言(十分钟带你学会Shell脚本!)

  shell语言(十分钟带你学会Shell脚本!)
  本篇文章没有太多的理论知识,主要分为基础语法案例、常用工具型命令(重点:帮助我们完成复杂需求)、工作中常见的需求(实战案例有源码,工作中可以直接套用),建议花十分钟阅读一遍收藏即可,当工作中需要编写Shell脚本直接套用案例中的脚本模板,足可满足后端开发的大部分需求。
  作为一名后端程序员,如果不掌握基础的Shell脚本,那么运维编写的一些简单的脚本根本无法看懂,也不便于与运维进行沟通交流。掌握Shell,可以帮助我们提高日常工作效率,比如快速构建部署项目、管理集群、监控服务器、定时清理日志文件或管理服务器等等。概述
  Shell是由C语言编写而成,外号俗称壳。开发者如果想操作Linux系统内核,必须通过Shell脚本进行交互,解释和执行用户命令,不可以绕过Shell直接操作Linux内核。Shell是一门强大的编程语言,容易上手功能强大。
  Shell解析器
  Linux中有几种常见的解析器,后面的模板都是使用Bash(最常用的解析器)解析器进行编写,查看当前系统支持哪些解析器:catetcshells
  查看当前系统使用的Shell解析器:echoSHELL
  基础语法与实操案例Shell变量
  对于后台开发者,系统环境变量一定不会陌生,这里不做过多赘述。Shell变量分为两种:系统变量、自定义变量。系统变量
  常见的系统变量如下:
  变量名
  解释
  PWD
  脚本执行的当前所在目录
  UID
  当前操作的系统用户ID
  当前操作用户的PID
  当前脚本的参数个数
  当前脚本的所有参数
  0
  当前执行程序的名称
  n
  当前程序的第N个参数
  HOME
  当前程序的home目录
  USER
  查询当前程序使用的操作用户自定义变量
  1。变量命令规则
  变量名必须是以字母或下划线字符开头,后面字母、数字或下划线字符。切记不用使用特殊符号,给自己带来不必要的麻烦。
  2。查看当前Shell所有的环境变量
  3。编写自定义变量变量名值如:A1等号两边不要有空格,如果值中间存在空格,请使用单引或者双引号:A39;张三39;撤销变量unsetA定义静态变量,静态变量不可以二次赋值,静态变量不可以unset撤销readonlyB2
  4。变量的作用域
  普通的变量作用域为当前的执行程序,程序外部不可使用当前定义的变量。通过export可以把变量升级为全局环境变量,这样当前系统所有程序都可以使用这个环境变量。
  创建测试脚本:touchtest。sh
  赋值执行权限:chmoduxtest。sh
  编写脚本:vimtest。sh
  定义全局脚本(脚本内容如下):exportusername张三!binbashechousername
  5。由于定义了全局变量,所以执行脚本可以正常输出username变量的值,反之脚本中定义的局部变量,其它脚本中不可以正常输出结果。。test。sh运算符
  运算符的种类大致可以分为(直接上代码示例)4种。算数运算符!binbasha10b20加法valexprabechoab:val减法valexprabechoab:val乘法valexprabechoab:val除法valexprbaechoba:val取余valexprbaechoba:val等于if〔ab〕thenechoa等于bfiif〔a!b〕thenechoa不等于bfi关系运算符!binbasha10b20等于if〔aeqb〕thenechoaeqb:a等于belseechoaeqb:a不等于bfi不等于if〔aneb〕thenechoaneb:a不等于belseechoaneb:a等于bfi大于if〔agtb〕thenechoagtb:a大于belseechoagtb:a不大于bfi小于if〔altb〕thenechoaltb:a小于belseechoaltb:a不小于bfi大于等于if〔ageb〕thenechoageb:a大于或等于belseechoageb:a小于bfi小于等于if〔aleb〕thenechoaleb:a小于或等于belseechoaleb:a大于bfi布尔运算符!binbasha10b20!非运算,跟java一样if〔a!b〕thenechoa!b:a不等于belseechoab:a等于bfi与运算,跟java里面的amp;amp;一样if〔alt100abgt15〕thenechoa小于100且b大于15:返回trueelseechoa小于100且b大于15:返回falsefi或运算,与java里面的同理if〔alt100obgt100〕thenechoa小于100或b大于100:返回trueelseechoa小于100或b大于100:返回falsefiif〔alt5obgt100〕thenechoa小于5或b大于100:返回trueelseechoa小于5或b大于100:返回falsefi字符串运算符!binbashaabcbefg判断字符串是否相等if〔ab〕thenechoab:a等于belseechoab:a不等于bfi判断字符串不相等if〔a!b〕thenechoa!b:a不等于belseechoa!b:a等于bfin判断字符串长度是否不为0if〔na〕thenechona:字符串长度不为0elseechona:字符串长度为0fi与n相反if〔za〕thenechoza:字符串长度为0elseechoza:字符串长度不为0fi表示检查字符串是否为空if〔a〕thenechoa:字符串不为空elseechoa:字符串为空fi流程控制
  ifelse不再做介绍,上述运算符案例中有大量使用,对于后端开发及其简单,流程控制在程序用使用非常频繁。case语法直接套用
  最后的)表示默认模式,相当于Java中的default,;;表示命令序列结束,相当于Java中的break。!binbashcase1in1)echo张三;;2)echo李四;;)echo王二;;esacfor循环
  案例:从1加到100。!binbashs0for((i0;ilt;100;i))dos〔si〕doneechoswhile循环
  案例:从1加到100。!binbashs0i1while〔ile100〕dos〔si〕i〔i1〕done输出值echos函数
  Shell脚本和其它编程语言类似,分为系统函数和自定义函数。系统函数
  1。basename基本语法basename路径后缀
  功能描述:basename命令会删掉所有的前缀包括最后一个(‘’)字符,然后将字符串显示出来。
  不加后缀:
  加后缀:
  如果脚本中需要获取当前路径的后缀名称:
  2。dirname基本语法dirname文件绝对路径
  功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)。
  自定义函数
  1。基本语法:〔function〕funname〔()〕{Action;〔returnint;〕}
  2。经验技巧
  必须在调用函数地方之前,先声明函数,Shell脚本是逐行运行。不会像其它语言一样先编译。
  函数返回值,只能通过?系统变量获得,可以显示加return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0255)。
  3。案例实操
  函数无返回值:计算两个输入参数的和。
  脚本源码:!binbashfunctionsum(){s0s〔12〕echos}read读取控制台的输入,n1,n2用于接收输入内容,p:指定读取值时的提示符;t:指定读取值时等待的时间(秒)readpPleaseinputthenumber1:n1;readpPleaseinputthenumber2:n2;调用方法sumn1n2;
  函数有返回值:计算两个输入参数的和(函数返回值,只能通过?系统变量获得)。
  !binbashfunctionsum(){read读取控制台的输入,n1,n2用于接收输入内容,p:指定读取值时的提示符;t:指定读取值时等待的时间(秒)readpPleaseinputthenumber1:n1;readpPleaseinputthenumber2:n2;return((n1n2))}调用方法sumecho计算两个数字之和为?!常用的Shell工具
  下面列举的几个命令非常实用,命令的具体使用方法请阅读:Linux命令大全,非常重要且命令参数太多,这里不做过多赘述。
  awk:非常强大的文本分析功能,开发中使用非常频繁。
  sort:对文件进行排序,并将标准结果显示输出。
  sed:sed是一种流编辑器,一次处理一行内容。
  cut:主要用于剪切字符、字节,并输出结果。开箱即用的Shell脚本
  请用Shell脚本写出查找当前文件夹(home)下所有的文本文件内容中包含有字符shen的文件名称。greprshenhomecutd:f1
  判断用户输入的是否为IP地址:!binbashfunctioncheckip(){IP1VALIDCHECK(echoIPawkF。39;1lt;255amp;amp;2lt;255amp;amp;3lt;255amp;amp;4lt;255{printyes}39;)ifechoIPgrepE〔09〕{1,3}。〔09〕{1,3}。〔09〕{1,3}。〔09〕{1,3}gt;devnull;thenif〔VALIDCHECKyes〕;thenechoIPavailable。elseechoIPnotavailable!fielseechoFormaterror!fi}checkip192。168。1。1checkip256。1。1。1
  定时清空文件内容,定时记录文件大小:!binbash每小时执行一次脚本(任务计划),当时间为0点或12点时,将目标目录下的所有文件内容清空,但不删除文件,其他时间则只统计各个文件的大小,一个文件一行,输出到以时间和日期命名的文件中,需要考虑目标目录下二级、三级等子目录的文件logfiletmpdateHF。logndateHif〔neq00〕〔neq12〕then通过for循环,以find命令作为遍历条件,将目标目录下的所有文件进行遍历并做相应操作foriinfinddatalogtypefdotruegt;idoneelseforiinfinddatalogtypefdodushigt;gt;logfiledonefi
  检测网卡流量,并按规定格式记录在日志中:!binbash检测网卡流量,并按规定格式记录在日志中规定一分钟记录一次日志格式如下所示:2019081220:40ens33input:1234bpsens33output:1235bps3while:do设置语言为英文,保障输出结果是英文,否则会出现buglogfiletmpdated。log将下面执行的命令结果输出重定向到logfile日志中execgt;gt;logfiledateFH:Msar命令统计的流量单位为kbs,日志格式为bps,因此要10008sarnDEV159grepAveragegrepens33awk39;{print2,t,input:,t,510008,bps,n,2,t,output:,t,610008,bps}39;echo因为执行sar命令需要59秒,因此不需要sleepdone
  计算文档每行出现的数字个数,并计算整个文档的数字总数:!binbash计算文档每行出现的数字个数,并计算整个文档的数字总数使用awk只输出文档行数(截取第一段)nwcla。txtawk39;{print1}39;sum0文档中每一行可能存在空格,因此不能直接用文档内容进行遍历foriinseq1ndo输出的行用变量表示时,需要用双引号linesednipa。txtwcL选项,统计最长行的长度nnecholineseds39;〔09〕39;gwcLechonnsum〔sumnn〕doneechosum:sum
  杀死所有脚本:!binbash有一些脚本加入到了cron之中,存在脚本尚未运行完毕又有新任务需要执行的情况,导致系统负载升高,因此可通过编写脚本,筛选出影响负载的进程一次性全部杀死。psauxgrep指定进程名grepvgrepawk39;{print2}39;xargskill9
  从FTP服务器下载文件:!binbashif〔ne1〕;thenechoUsage:0filenamefidir(dirname1)file(basename1)ftpnvlt;lt;EOFn自动登录open192。168。1。10ftp服务器useradminpasswordbinary设置ftp传输模式为二进制,避免MD5值不同或。tar。gz压缩包格式错误cddirgetfileEOF
  监测Nginx访问日志404情况:场景:1。访问日志文件的路径:datalogaccess。log2。脚本死循环,每10秒检测一次,10秒的日志条数为300条,出现404的比例不低于10(30条)则需要重启phpfpm服务3。重启命令为:etcinit。dphpfpmrestart!binbash监测Nginx访问日志404情况,并做相应动作logdatalogaccess。logN30设定阈值while:do查看访问日志的最新300条,并统计404的次数errtailn300loggrepc39;40439;if〔errgeN〕thenetcinit。dphpfpmrestart2gt;devnull设定60s延迟防止脚本bug导致无限重启phpfpm服务sleep60fisleep10done
  iptables自动屏蔽访问网站频繁的IP
  方法1:根据访问日志(Nginx为例)。!binbashDATE(datedbY:H:M)ABNORMALIP(tailn5000access。loggrepDATEawk39;{a〔1〕}END{for(iina)if(a〔i〕gt;100)printi}39;)先tail防止文件过大,读取慢,数字可调整每分钟最大的访问量。awk不能直接过滤日志,因为包含特殊字符。forIPinABNORMALIP;doif〔(iptablesvnLgrepcIP)eq0〕;theniptablesIINPUTsIPjDROPfidone
  方法2:通过TCP建立的连接。!binbashABNORMALIP(netstatanawk39;4:80amp;amp;6ESTABLISHED{gsub(:〔09〕,,5);{a〔5〕}}END{for(iina)if(a〔i〕gt;100)printi}39;)gsub是将第五列(客户端IP)的冒号和端口去掉forIPinABNORMALIP;doif〔(iptablesvnLgrepcIP)eq0〕;theniptablesIINPUTsIPjDROPfidone
  Expect实现SSH免交互执行命令:登录脚本:catlogin。exp!usrbinexpectsetip〔lindexargv0〕setuser〔lindexargv1〕setpasswd〔lindexargv2〕setcmd〔lindexargv3〕if{argc!4}{putsUsage:expectlogin。expipuserpasswdexit1}settimeout30spawnsshuseripexpect{(yesno){sendyesr;expcontinue}password:{sendpasswdr}}expectuser{sendcmdr}expectuser{sendexitr}expecteof
  执行命令脚本:写个循环可以批量操作多台服务器。!binbashHOSTINFOuserinfo。txtforipin(awk39;{print1}39;HOSTINFO)douser(awkvIip39;I1{print2}39;HOSTINFO)pass(awkvIip39;I1{print3}39;HOSTINFO)expectlogin。expipuserpass1done
  Linux主机SSH连接信息:catuserinfo。txt192。168。1。120root123456
  创建10个用户,并分别设置密码,密码要求10位且包含大小写字母以及数字,最后需要把每个用户的密码存在指定文件中:!binbash创建10个用户,并分别设置密码,密码要求10位且包含大小写字母以及数字最后需要把每个用户的密码存在指定文件中前提条件:安装mkpasswd命令生成10个用户的序列(0009)foruinseqw009do创建用户useradduseru生成密码pmkpasswds0l10从标准输入中读取密码进行修改(不安全)echoppasswdstdinuseru常规修改密码echoepnppasswduseru将创建的用户及对应的密码记录到日志文件中echouserupgt;gt;tmpuserpassworddone
  扫描主机端口状态:!binbashHOST1PORT2225808080forPORTinPORT;doifechoamp;gt;devnullgt;devtcpHOSTPORT;thenechoPORTopenelseechoPORTclosefidone用Shell打印示例语句中字母数小于6的单词示例语句:Bashalsointerpretsanumberofmulticharacteroptions。!binbashShell打印示例语句中字母数小于6的单词forsinBashalsointerpretsanumberofmulticharacteroptions。donechoswccif〔nlt6〕thenechosfidone

平谷轻轨(轨道交通平谷线马昌营站位置确定啦)平谷轻轨(轨道交通平谷线马昌营站位置确定啦)平谷线一直是粉丝们最关心的轨道交通线路之一。平谷线起自平谷区,经燕郊、位于通州的北京城市副中心、朝阳等地,是连通东部地区……墨非定律(一起来了解一下墨菲定律?)墨非定律(一起来了解一下墨菲定律?)与错误其生,迎接成功众所周知,人类即使再聪明也不可能把所有事情都做到完美无缺。正如所有的程序员都不敢保证自己在写程序时不会出现错……余华喜剧式乡土幽默,惊讶活着这么畅销,谈如何走上文化道路余华惊讶《活着》这么畅销,谈如何走上文化道路,史铁生当守门员后续没想到余华老师小说写得那么好,人也那么搞笑,看到他上董卿的节目那时候的对话,真的太搞笑,太凡尔赛了。……大宋宫词口碑下滑到3。8分,网友还敢往下滑吗?《大宋宫词》下滑到3。8分,与21年前的《大明宫词》相差甚远《大宋宫词》于3月20日上线后,豆瓣开分6。1,只是勉强平了及格线。之后,该剧口碑一路下滑,现在居然跌到了3。……科比黑曼巴(最后的黑曼巴!34岁的科比是什么水平?)科比黑曼巴(最后的黑曼巴!34岁的科比是什么水平?)2012年夏天,湖人管理层在科比34岁生日到来之前送给了他一份大礼,他们先是和太阳先签后换得到纳什,之后又在科比生日前……立秋贴秋膘(立秋一起贴秋膘什么意思)立秋贴秋膘(立秋一起贴秋膘什么意思)2020年8月7日,正式进入立秋。立秋是我国的二十四节气之一,立秋的到来也意味着秋天即将开始,在立秋的时候也有许多养生小常识,运动要注……移动查询话费(中国移动查话费的5种方法)移动查询话费(中国移动查话费的5种方法)中国移动在我国的用户数量已经快要接近10亿,为了减少人工客服的压力,移动公司也提供了多种途径进行话费查询。我们知道,早期的移动公司……继续霸屏!靳东四部大剧强势来袭,主演全是一线大咖,爆款预定由靳东、李乃文、高露等人主演的《温暖的味道》已经收官,作为一部扶贫献礼剧,该剧无论是口碑还是收视表现都非常出彩。接档上一部剧0。2的收视,《温暖的味道》实时拿下0。8的收视成绩……2021流行短款风衣,不管高个还是矮个,都要学会这样来穿每当到了换季,就变成穿衣大乱炖,刚好现在是脱下厚厚的棉袄,穿上清爽的薄外套的时候。那么你会穿什么样的衣服,来诠释出自己的与众不同呢?如果想要在2021年做个时髦精,那这件短款风……天后阿娇的混乱情史1981年,一个女婴奉旨降临人间,出生在地灵人杰的香港。家人给她取名为钟狄珊,中间这个字太火,害怕压不住,于是改名钟嘉励。后来她踏足娱乐圈,混得风生水起,那时有多少……绿茶鼻祖上位史被扒!30岁车库密会高富帅,40岁带娃嫁王室,劲爆,泰国又出狗血新闻!!!泰国万达财团太子爷的嫩模女友,当街暴打一位40岁大妈,抱头连扇7个耳光!正当国民怒骂小三该死时,却出现了大反转!知情人爆料,这位大……舞台扒衣当众羞辱布兰妮,贾老板是如何把自己口碑败坏的?近日,欧美娱乐圈又掀起了一阵巨大波澜。从全球最大的社交软件推特的热门趋势当中来看,昔日巨星布兰妮再度登顶热搜。仔细回想,这位被中国粉丝亲切地称为小甜甜的流行巨星布兰……
51岁的李嘉欣,一生绯闻无数,靠美貌征服了多少男人?玖小沐最美港姐,五官精致、肤白貌美,从出生那一刻,她就成了美的标杆。绯闻女神,因为美,又处于瓜圈这样一个混乱之地,注定一生绯闻无数。出道即巅峰的她,不单单是凭……快递行业大变天,中国邮政推出次日达,留给顺丰的时间不多了点击右上角【关注】财税黄金眼头条号,收获更多财税秘籍。本文共654个字,阅读全文约需要2分钟。快递行业出大事啦!就在今天,快递行业大哥大中国邮政放大招了,直接……董洁,一身红衣裹酥胸,浪姐2怒刷存在感,她能成功翻红吗?文黑土《浪姐2》依靠什么维持热度?黄晓明宣布退出《浪姐2》的录制,傻大姐那英几次伤心落泪,左小青官宣离婚,程莉莎道歉吉克隽逸,金巧巧内涵节目组。。。。。。。是……两个骗子?气得老东家快报警的巴图姆与格里芬,拿底薪像打了鸡血NBA本赛季出现了两个著名的骗子,一位是篮网队的格里芬,一位是快船队的巴图姆,这两位球员本赛季的故事可是太有意思了,简直是让老东家恨得咬牙切齿。格里芬本赛季被活塞队买断随……鲁豫一日行迎来周华健与混血儿子首次荧屏同框本周四晚,东南卫视《鲁豫有约一日行》第七季第二期精彩继续。本期节目中,华语乐坛常青树周华健带领鲁豫品尝私藏小店、探访音乐工作室。笑声不断,精彩不断。私藏小馆竟是名家聚集地……儿时的中秋儿时,从过了端午节我就盼望中秋,因为只有过节才能吃得上丰盛的饭菜,尤其是中秋的月饼。那一块块月饼没有漂亮的包装,没有铺天盖地的广告宣传,没有种类繁多的月饼馅儿,但是那单一……华语十佳专辑,王菲两次上榜,周杰伦难进前三,第一名与众不同一、崔健《新长征路上的摇滚》流派:摇滚推荐指数:远古摇滚大神的首专《新长征路上的摇滚》真的是开启了内地摇滚崛起的硬核力量,这专真的有思想有深度有呐喊有感伤。歌词中表……41岁张柏芝颜值重回巅峰!复原19岁美照状态还惊艳,带火了扎张柏芝可谓是很多人心目中的女神,作为演员的她拍摄了很多经典的作品,最近在乘风破浪的姐姐当中可谓是实火,大家彻底再一次被她的美貌所沦陷。即便如今41岁的张柏芝状态依旧是处于巅峰时……某报某文有一句没有单位,你,什么都不是!对此你怎么看?滴水成河,一个再牛逼的单位,也是一个个的人组成的,你觉得没有这个可以没有那个可以,这个那个都没有了,你单位是啥?个人觉得,这种无耻的洗脑言论,恰恰不是真正的领导说出来的,……组图恋爱4年,鹿晗的变化不大,关晓彤却像变了个人娱乐圈好像有一个不成文的规矩,就是隐婚隐恋。尤其是一些顶流明星,积累了庞大的粉丝群体,往往背负着巨大的偶像包袱,不敢轻易公布恋情和婚讯。偶像派明星一旦官宣爱情,就会被粉丝……阿朱不要硬演!有人灵动娇俏,有人走御姐风,新版看起来苦大仇深萧峰曾说:阿朱就是阿朱,四海列国,千秋万载,只得有一个阿朱。能担得起乔峰如此深爱的,也唯有阿朱而已。而目前新版《天龙八部》的剧情已走上主线,尽管人物选角不尽人意,但……追逐和舍弃,难以平衡的本性和欲望解读追风筝的人《追风筝的人》是美籍阿富汗裔作家卡勒德胡赛尼的处女作,于2003年出版,曾一度跃居畅销书榜首,是很多人的必读书目之一。该书讲述了阿富汗富家少爷阿米尔与仆人之子哈桑之间关于……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网