Shell脚本编程实战
做Java的肯定都接触过Linux系统,那么很多时候我们在开发的过程中都是把我们项目打成一个jar包,或者是war包的形式,然后通过XFTP上传到我们服务器的指定目录,然后运行一端启动脚本,让我们的项目变得可以访问就像。shservice。shstart然后启动我们写好的sh的shell脚本。接下来我们就来学习一下关于Shell脚本是如何写出来的。Shell脚本
Shell脚本是什么?Shell是一个命令解释器,它的作用是解释执行用户输入的命令及程序等,也就是说,我们用户每输入一条命令,Shell就会相对应的执行一条命令。当命令或程序语句不在命令行下执行,而是通过一个程序文件来执行时,该程序文件就被称为Shell脚本。
在我们的Shell脚本中,会有各种各样的内容,赋值,计算,循环等一系列的操作,接下来我们就来看看这个Shell脚本怎么写吧
1。查看自己当前系统默认的Shell
echoSHELL
输出:binbash
2。查看系统支持的Shell
catetcshells
输出:
binshbinbashusrbinshusrbinbash
也就是说,我们的云服务器是支持我们在这里给他安排Shell脚本的Shell脚本怎么写出来的
我们这时候先来安排一下sh的文件,创建一个文件夹,然后在其中创建一个sh的文件。
mkdirusrlocalshelltest
touchtest。sh
创建完成我们编辑一下内容
vimtest。sh!binbashechoHelloWorldShell
然后我们出来运行一下我们的Shell的第一个脚本
bashtest。sh
出来的结果是HelloWorldShell
一个及其简单的脚本出现了,接下我们就分析一波我们写了点啥?
!binbash
!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell
我们在之前也使用了echoSHELL来查看了自己系统默认的是哪一种sh解析器,之前看到的是binbash,所以我们在写Shell脚本的时候,我们在开头默认的约定中,我们写了这个是用binbash来进行解释的,
那么我们如何像之前调用我们的当前目录中的Shell脚本一样去调用他呢?就像这个样子的。shservice。shstart
1。授权,
我们先不授权试一下看看能通过。test。sh进行调用么
bash:。test。sh:Permissiondenied会提示这个,也就是没有授权定义,
授权命令:chmodxtest。sh
2。执行。test。sh
然后调用就能正常输出了,就是说,在当前的目录下执行这个脚本命令。Shell脚本的变量定义变量和使用
变量命名实际上很简单,我们先来试一下
namezhiyikeji
这时候我们怎么使用变量呢?实际上只要在前面加上一个符号就可以
echoname〔rootiZbp10j01t7sgfqekyefpoZ〕echonamezhiyikeji〔rootiZbp10j01t7sgfqekyefpoZ〕echo{name}zhiyikeji
上面的两种写法都是可以的,外面的大括号加和不加区别不大,可以省略,直接就name就可以使用你定义的变量
使用括号的意义一般在于区别某些变量,比如你写了一串的内容,可能写的是echonameismyfriend,如果连在一起,是不是有点尴尬,这时候就可以使用括号区别一下,echo{name}ismyfriend不使用括号的时候,他就去找nameismyfriend这个变量了,就无法出来我们要的效果。删除自己定义的变量
unsetname
这时候我们就把我们刚才定义的namezhiyikeji这个变量给去掉了,我们可以调用一下我们的变量看是什么?
echoname〔rootiZbp10j01t7sgfqekyefpoZ〕unsetname〔rootiZbp10j01t7sgfqekyefpoZ〕echoname
这是不是就证明我们自己定义的变量已经删除了只读变量
那么我们需要一个关键字,大家肯定能想到是什么关键字readonly
我们先给name赋值,然后使用readonly设置只读,然后再改变一下试试,〔rootiZbp10j01t7sgfqekyefpoZ〕namezhiyikeji〔rootiZbp10j01t7sgfqekyefpoZ〕echonamezhiyikeji〔rootiZbp10j01t7sgfqekyefpoZ〕readonlyname〔rootiZbp10j01t7sgfqekyefpoZ〕echonamezhiyikeji〔rootiZbp10j01t7sgfqekyefpoZ〕nameceshibash:name:readonlyvariable〔rootiZbp10j01t7sgfqekyefpoZ〕
竟然是真的,如果不设置只读,是不是会重新可以进行赋值,我们测试个年龄,〔rootiZbp10j01t7sgfqekyefpoZ〕age10〔rootiZbp10j01t7sgfqekyefpoZ〕echoage10〔rootiZbp10j01t7sgfqekyefpoZ〕age20〔rootiZbp10j01t7sgfqekyefpoZ〕echoage20
所以我们就可以肯定,readonly就是设置只读的关键词,记住了么?
那么设置只读的变量可以删除么?毕竟总有杠精的面试官会提问这个棘手的问题,但是,阿粉试过的所有方式好像都是不行的,阿粉就直接重启了自己的服务器,这样临时的变量就不存在了!Shell脚本的流程控制
说真的,Shell脚本的流程控制数一般才是yyds,为什么这么说,因为你在写大部分的脚本的时候,流程控制的地方永远是最多的,判断,选择,等等一系列的函数,当时熟练使用的时候,就发现这东西确实很有意思。IF
我们先说最简单的ifelse这也是我们最经常使用的判断,在写Shell脚本的时候,就不像我们的Java中直接写if(。。。){}else{。。。。}
Xshell中的语法就不是这个样子的,Xshell语法:if。。。then。。。else。。。fi
末尾的fi就是if倒过来拼写,我们可以写一个if的脚本试一下这个流程能否理解。!binbashif〔1gt2〕;thenecho值大于2elseecho值小于2exitfi
这里申明一下,ge标识的是大于等于符号;le表示的是小于等于符号;gt表示大于符号;lt表示小于符号;eq表示等于符号;ne表示不等于符号;
我们在上面这段脚本中写就是内容就是,我们给脚本传入一个值,然后比对这个值和2的大小关系,然后输出我们指定的内容。
运行后就能看到〔rootiZbp10j01t7sgfqekyefpoZshelltest〕shtest2。sh1值小于2〔rootiZbp10j01t7sgfqekyefpoZshelltest〕shtest2。sh3值大于2
1表示我们给Shell脚本输入的第一个参数,0就是你写的shell脚本本身的名字,2是我们给Shell脚本传的第二个参数
大家在部署某些项目的时候,是不是启动命令就很简洁,就是shservice。shstart类似这种的,那我们来看看一般这种是怎么写的,这就用到了另外一块的内容,和if类似,在Java中也有,那就是Case。Case
我们先来看看Case的语法,
case。。。esac实际上就和Java中的Case是非常相似的,case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。esac是一个结束的标志。case值in匹配值1)command1command2;;匹配值2)command1command2;;esac
光说不练,假把式,我们来搞一下试试写一个脚本来搞一下。就用我们刚才说的shservic。shstart来进行测试。case1instart)输出启动命令echostart已经开始;;stop)输出停止命令echostop命令执行;;esacexit
我们来看看运行结果〔rootiZbp10j01t7sgfqekyefpoZshelltest〕shservice。shstartstart已经开始〔rootiZbp10j01t7sgfqekyefpoZshelltest〕shservice。shstopstop命令执行
那么这段Shell脚本是什么意思呢?其实很简单,匹配我们传入的第一个字符,和start还有stop进行比较,如果匹配上之后,输出命令,最后退出即可。
是不是感觉没有那么复杂了呢?For
说到流程控制,那么肯定不能不说for,毕竟for循环在Java中那可是重头戏。
我们先看他的格式foriinitem1item2。。。itemNdocommand1command2。。。commandNdone
那么我们有没有说像是Java中那种for循环一样的方式呢?比如说这个for((i1;ij;i))
实际上也是支持这种的,我们来写一个试试。j1for((i1;ij;i))doechoidone
执行一下看看〔rootiZbp10j01t7sgfqekyefpoZshelltest〕shfortest。sh6123456
既然有for那是不是就有while呢?是的,没错,确实是有while,也是循环的意思,但是写法有略微不一样的地方Whilewhileconditiondocommanddone
我们来举个尝试打印九九乘法表来看一下a1b1while((a9))dowhile((ba))doletcab声明变量cechonabcletbdoneletaletb1因为每个乘法表都是1开始乘,所以b要重置echo显示到屏幕换行done〔rootiZbp10j01t7sgfqekyefpoZshelltest〕shwhileTest。sh11121222431332633941442843124416515521053155420552561662126318642465306636717721473217428753576427749818821683248432854086488756886491992189327943695459654976398729981
是不是也挺简单的?
其实Shell脚本的编写一般都是在实际应用中提升,单纯的写测试脚本,也是可以让自己对知识的掌握比较充分,而我们一般都是写一些比较简单的脚本,复杂的不是还有运维么?
有机顶盒真好作文400字我其实是个电视迷,在周末没事儿可做,就打开电视,津津有味地看起来。有一次,周末从奶奶家回来,一进小区,便看到了几顶蓝色的遮阳伞。周边摆着两个大大的广告牌:机顶盒大优惠。我……
如果优先考虑5G,同价位先排除4G,苹果出局首先,iPhone,因为我有iPad和ApplePencil,计划最近购买Macbook。原因很简单。1、不想再折腾安卓系统了,已经过了喜欢瞎折腾的年纪,稳定和省心才是目前的目……
三年级写人作文喜怒无常的小表弟今天我又去了姥姥家,见了我那个喜怒无常的小表弟。告诉你们吧,他呀,一会儿哭一会儿笑,有时候我都搞不懂他是哭还是笑。今天一到那儿,他看见我先是哼哼几声,像是生疏了。可一会儿……
最前线苹果M1芯片设计总监离职,重返老东家英特尔文蒲诗钰编辑苏建勋1月7日据外媒报道,苹果Mac系统架构总监杰夫威尔科克斯(JeffWilcox)跳槽到英特尔。目前尚不清楚将由谁接任Mac系统架构总监。在苹果任职……
让爱弥漫帮扶路民情日记800字阳春三月,乍暖还寒,人们小心翼翼地增减着衣服,生物钟一大早准时将我从睡梦中催醒,一骨碌从床上爬起,到隔壁把宝贝女儿叫醒,想起昨天办公室通知今天上午要到石牛乡开展二对一帮扶活动,……
跳房子作文3篇跳房子作文(一)今天下午,我和妈妈玩了一个游戏,名字叫跳房子,好玩的不得了,但也把我累得不得了。游戏规则是这样的:用粉笔画一个九宫格,我家正好有方砖,就用方砖代替。……
可爱的它小学作文世界上可爱的不仅仅只有人,动物、植物。我认为世上最可爱的是芳香的厕所。想知道它的故事吗?那就来看看吧!厕所里有很多悄悄话。厕所会有两个到三个同学坐在一个坑里说悄悄话。那放……
描写春天风景的好词好句一场春雨过后,岸边的柳树被洗刷得更绿了。它的纸条上显现出了星星点点的嫩芽,小草顽皮、兴奋地探出脑袋来hellip;hellip;放眼望去,到处都是绿油油的一片。西湖有着生命的颜……
2015百团大战观后感2000字百团大战观后感篇一:在看过《百团大战》第二阶段的进攻以后,对我产生了很大的感触,为什么赵章能为了他人舍弃自己的生命呢?是什么让他为了祖国纵横沙场?又是什么让他为了取得胜利……
醉生梦死的成语故事醉生梦死:像在醉梦中那样糊里糊涂地过日子。形容生活目的不明确而颓废、沉沦。小编收集了醉生梦死的成语故事,希望各位读者喜欢。〔拼音〕:zuigrave;shngmegrav……
400字田园风光作文导语:在乡下,有一大片一大片的田野,里面长着小麦、稻谷等农作物。下面是小编整理的一些田园风光的作文,欢迎查阅,谢谢!第一篇:春天的田园春夏秋冬四个季节,田园有着不同的风光……
我最喜欢的工艺品我的书桌上摆着一个陶瓷猪存钱罐,是一件很精美的工艺品,我非常喜欢它,那是妈妈为了让我变得节约特地给我买的。妈妈确实达到了这个目的,我帮妈妈干活来的钱都在里面,平时也不铺张浪费了……
妈妈请放开温暖的手1000字作文妈妈请放开温暖的手亲爱的妈妈,首先,我要感激您,是您点亮了我的生命之火,是您给我那幼小的心灵带来了欢乐,让我感受到母爱是伟大的,生命是伟大的。可是妈妈,我还是要对您说声mdas……
时间会带走多少感情时间它就像是一把刀,起初给了你甜蜜的时光,后面却给你致命的一刀。有没有遇到那么一个人,你狠在乎她很在乎她,你们的感情也非常的好,后来你们分隔两地,再次见面却发现无法可说了……
走进春天优美作文春回大地,万物复苏!走进一个新的世界,用眼睛去看,用耳朵去听,用鼻子去闻,用心去体验,你会感觉春天如此美妙!请屏呼吸,与我一起走进春天!任你在春天里欢唱,任你在春天里泼辣,任你……
人生万花筒初中作文600字今天我在玩具店,看到了一个万花筒。嘿!你还别说,真的很神奇,本来是黄色的蝴蝶在花丛中飞,一转就变成了一副武夷山山水画,又一转,马上变成了蓝天白云。我叫嚷着要妈妈给我买,妈妈却说……
简单生活在家里,父母总是望子成龙、望女成凤。我父母也是一样的,小时候我也曾想过自已长大后如何雄图伟业,而渐渐的后来我长大了,明白了很多!便知道世上其实有很多东西是名利买不到,得不到的。……
外国名著读阿凡提的故事有感在暑假里,我看了一本阿凡提的故事。有一天,阿凡提路过一家旅馆,牌子上写着:明天不要钱,这牌子吸引很多人,都来这儿吃饭,一天后,住宿的人刚要走,老板把他们叫住说:你们还没付钱呢!……
苦涩的诉说作文900字风呼呼地刮着树枝和树叶,门外不时传来人们聊天声,我和妈妈坐在饭桌前,也聊了起来。当聊到表弟时,我突然激动地说:ldquo;大人总以为是大孩子欺负小孩子,其实很多大孩子是被……
爱情故事赵朝刚爱情故事亲爱的,你怎么背着我爱上了别人亲爱的你怎么背着我爱上了别人,可惜别人还不是别人,为什么,我跟了你那么久,把什么都给了你到最后hellip;连她的一张脸……
威马M7量产,威马汽车多方面管理目前,新能源汽车行业市场的不断扩大,不仅取代了传统的燃料汽车市场,而且表明智能新能源汽车行业市场的潜力正在迅速释放。为了呈现智能新能源汽车的快速发展,威马在推出了许多智能纯电动……
对锂电池驱动新能源汽车的思考近年来以锂电池作为驱动方式的所谓新能源汽车,在中国得到了迅猛发展,这种汽车,被称为新能源汽车或者纯电动汽车。据统计,截止2022年3月,中国的纯电动汽车保有量突破1000万辆,……
是我曾未懂过你吗作文范文曾经,我天真的认为:友谊是世界上最伟大的东西。现实中,却是一张张冷酷的脸面,为了得到自己的东西不择手段,甚至,欺骗家人,朋友。从小,我们一起玩,一起上学,渐渐地,你变了,……
大榕树作文350字我们学校的内操场有棵大榕树。无论哪棵,都粗壮无比。春天,大榕树的叶子开始慢慢长多了,翠绿的颜色显得十分明亮。这儿一簇,那儿一簇,风拂过,叶子沙沙地响着,如同银铃般清脆。树……