还剩22页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
脚本语言基础学问linux shell一.shell简介Linux系统的shell作为操作系统的外壳,为用户供应运用操作系统的界面,更精确的说,shell是用户及Linux操作系统沟通的桥梁用户既可以输入叮嘱执行,又可以利用Shell脚本编程,完成更加困难的操作shell是一个叮嘱说明器,它从输入设备读取叮嘱,再将其转为计算机可以了解的指令,然后执行它在linux中,shell又不仅是简洁的叮嘱说明器,而且是一个全功能的编程环境Linux的Shell种类众多,常见的有Bourne Shell/usr/bin/sh或/bin/sh,Bourne AgainShell/bin/bash,C Shell/usr/bin/csh,K Shell/usr/bin/ksh,Shell forRoot/sbin/sh,等等不同的Shell语言的语法有所不同,所以不能交换运用每种Shell都有其特色之处,基本上,驾驭其中任何一种就足够了通常用Bash,也就是Bourne AgainShell进行编程二.shell运用
1.建立和运行shell程序shell脚本程序依据确定的语法结构把若干linux叮嘱组织在一起,是这些叮嘱依据我们的要求完成确定的功能它可以进行类似程序的编写,并且不须要编译就能执行只需修改其权限像编写高级语言的程序一样,编写shell程序须要一个文本编辑器,如VI和VIM,通常运用VIM文本编辑器,支持更便利的插入模式首先运用VIM编辑器编辑一个hello,sh文件#!/bin/bashtthello worldexampleelif[条件2];then执行程序2else执行程序3fi例子#!/bin/bashdeclare-i a=10declare-i b=20if[$a==$b];thenecho〃a isequal to b〃elif[$a-gt$b];thenecho〃a isgreater thanb〃elseecho〃a isless thanb〃fi输出结果为a isless thanb4case...esac语句结构case$变量名称in“第一个变量内容”程序1••99“其次个变量内容”程序2其它程序exit1esac例子#!/bin/bashecho〃you like”echo〃1is apple”echo〃2is orange”echo〃input your choice”read acase$a inecho〃you likeapple”■■,,echo〃you likeorange”■■,,*echo〃you likenothing”exit1esac执行后结果为:you like1is apple2is orangeinputyourchoice1you likeapple
3.shell循环类型1for循环循环操作项目清单重复一组叮嘱列表中的每个项目语法一for初始值;限制值;执行步阶do程序done初始值变量在循环中的起始值限制值当变量值在这个限制范围内时,就接着进行循环执行步阶每作一次循环时,变量的变更量例子#!/bin/bashdeclare-i ss=0fori=l;i=100;i++dos=s+i doneecho the sum is$s〃输出结果为thesumis5050语法二for varin conicon2con
3...//var是一个变量do程序done第一次循环时,$var的内容为coni其次次循环时,$var的内容为con2第三次循环时,$var的内容为con3例子#!/bin/bash declare-a AA二l2345678910declare-i cfori in13579doc=c+A[$i];doneecho〃the countis$c〃输出结果为the countis302while循环while循环,使您能够重复执行一组叮嘱,直到某些条件发生它通常用于当你须要反复操纵的变量值语法如下while[条件]do程序done当条件成立的时候进入while循环,直到条件不成立时才退出循环例子#!/bin/bashdeclare-i a=0while[$a-It10_doecho$aa=a+1done这将产生以下结果0123456789每一次执行这个循环,变量a进行检查,看该值是否小于10假如a的值小于10,则输出该值3until循环完备的状况下,你须要执行的一组叮嘱某个条件为真时,while循环执行有时候,你须要执行一组叮嘱,直到某个条件为真语法如下until叮嘱do程序done这种方式及while循环恰恰相反,当叮嘱成立的时候退出循环,否则接着循环例子#!/bin/bashdeclare-i a=0until[$a-gt10_doecho$aa=a+ldone这将产生以下结果012347894select循环语法如下select varin wordlword2do程序done例子#!/bin/bashecho〃what isthis”select iin teacofee waterapple orangenone docase$i intea|cofee|waterecho“drink”■■,,apple|orangeecho〃fruit〃■■,,none break*echo/zERROR:Invalid selection”■■,,esacdone打印信息为what isthis1tea2cofee3water4apple5orange6none#1drink#6四.shell数组shell数组的运用$a=1233435$echo$a//默认获得第一个元素123$echo${a[@]}//访问整个数组,@或者*获得整个数组1233435$echo${#a[@]}//获得数组的长度4$echo${#a
[3]}//获得字符串长度1$echo${a[@]:1:2//切片方式获得一部分数组内容343$echo${a[@]:2}//从其次个元素起先35$echo${a[@]::2]//到其次个元素12334应用实例#!/bin/bashdeclare-a a=l2345fori=0;i=4;i++doecho${a[i]}done这将产生以下结果12五:shell函数运用函数来执行重复性的任务,是一个很好的方式来创建代码的重用代码重用是现代面对对象编程的原则的重要组成部分
1.创建函数声明一个函数语法function_name{list ofcommands}函数名function_name,这就是你将运用它从其他地方在你的脚本调用函数名必需遵循括号内,后括号内的叮嘱的列表例子#!/bin/bash#Define yourfunction hereHello{echo“Hello World”#Invoke yourfunctionecho hello world”这样,一个最简洁的Shen程序就编写完了第一行#!说明hello,sh这个文件的类型的,这有点类似于Windows系统下的用不同的文件后缀来表示不同的文件类型,但又不完全相同Linux系统依据#!及该字符串后面的信息确定该文件的类型在#!之后是一个路径名,这个路径名指定了一个说明脚本中叮嘱的程序其次行#hello worldexample就是shell程序的注释,(但后面紧接着“!”号的除外)第三行echo(回显)语句的功能是把echo后面的字符串输出到标准输出中现在,建立和写好之后,则该程序如何运行呢?由于该脚本没有执行的权限,只须要修改其执行的权限即可,执行chmod a+x hello,sho然后输入叮嘱./hello.sh即可看到效果
2.shell变量变量是一个存储值的实体,可以是一个名字,或者一个特别的值shell可以创建,支配和删除变量
(1)变量设置规则a.变量及变量内容以等号
(二)来连接b.等号两边不能干脆接空格符c.变量名称只能是英文字母及数字或下划线,但是数字不能是开头符d.引用变量名用“$变量名”#!/bin/bashtthello worldexamplea=//hello world”echo$aHello当你想执行上面的脚本,它会产生以下结果Hello World
2.参数传递给函数你可以定义一个函数,它接受参数,而调用这些函数将这些参数代表$1,$2,依此类推例子#!/bin/bash#Define yourfunction hereHello{echo Hello World$1$2〃#Invoke yourfunctionHello Zhang lisi这将产生以下结果Hello WorldZhanglisi
3.从函数的返回值例子#!/bin/bash#Define yourfunction hereHello{echo HelloWorld$1$2〃return1#Invoke yourfunction HelloZhangsan lisi#Capture valuereturned bylast commandr=$echo Returnvalue is$r〃这将产生以下结果HelloWorldZhangsan lisiReturnvalue is
14.嵌套函数函数更好玩的功能之一是,他们可以调用本身以及调用其他函数被称为递归函数调用自身的函数例子#!/bin/bash#Calling onefunction fromanother one{echo This is the first function”two two{echo〃This isthe secondfunction”#Calling functionone.one这将产生以下结果ThisisthefirstfunctionThis isthe secondfunction以上例子一样可以输出hello worldoe.若有空格符可以运用双引号或单引号将变量内容结合起来,但必需留意,双引号的特别字符可以保有变量的特性,但是单引号内的特别字符则仅为一般字符#name=〃$L0GNAME is hh〃//root is hh#name=,$LOGNAME ishh,//$LOGNAME ishhf.通常大写字符为系统预设变量,自行设定的变量可以运用小写字符2取消变量用unset变量名#!/bin/bashtthello world例子a二〃helloworld”unset aecho$a以上例子将不会打印出任何东西
3.shell特别变量$0执行的脚本的文件名$1脚本文件的第一个参数名$#传递到脚本的参数个数$*以一个单字符串显示全部向脚本传递的参数$$脚本运行的当前进程ID号$显示最终叮嘱的退出状态,表示没有错误,其它值表示有错误例子a.sh#!/bin/bashecho the$0〃echo〃the parameter is$1$2〃echo numberof parameter is$#〃echo all parameteris$*〃echo$加权限后执行./a.sh hhmm gg则打印the./a.shthe parameterishhmmnumber ofparameteris3allparameterishhmm gg
04.常用shell内嵌叮嘱1echo显示变量内容2env显示目前系统中主要的预设变量内容3set显示目前系统中全部的变量内容4read:从键盘读入变量内容5declare:声明变量内容-a定义为数组array-f定义为函数function-i定义为整数integer-r定义为“只读”-x定义为透过环境输出变量,例子:#!/bin/basha=l+ldeclare-i b=l+lecho$aecho$b执行后输出结果为1+
125.条件测试在写Shen脚本时,常常遇到的问题就是推断字符串是否相等,可能还要检查文件状态或进行数字测试,只有这些测试完成才能做下一步动作test叮嘱就是用于测试字符串,文件状态和数字的.test叮嘱两种格式test condition或[condition_运用方括号时,要留意在条件两边加上空格三.shell脚本编程基础学问
1.shell基本运算符1算术运算符+:对两个变量做加法对两个变量做减法\*:对两个变量做乘法/:对两个变量做除法**:对两个变量做累运算%:取模运算,第一个变量除以其次个变量求余数+二加等于,在自身基础上加其次个变量*二减等于,在第一个变量的基础上减去其次个变量*二乘等于,在第一个变量的基础上乘以其次个变量/=:除等于,在第一个变量的基础上除以其次个变量%=:取模赋值,第一个变量对其次个变量取模运算,再赋值给第一个变量在运用这些运算符时,须要留意到运算依次的问题例如输入下面的叮嘱,输出1+2的结果echo1+2Shell并没有输出结果3,而是输出了1+2在shell中有三种方法可以更改运算依次a,用expr变更运算依次可以用echoexpr1+2来输出1+2的结果,用expr表示后面的表达式为一个数学运算须要留意的是,并不是一个单引号,而是“Tab”键上面的那个符号b,用let指示数学运算可以先将运算的结果赋值给变量b,运算叮嘱是b=let1+2o然后用echo$b来输出b的值假如没有let,则会输出1+2c,用$口表示O数学运算将一个数学运算写到$口符号的中括号中,中括号中的内容将先进行数学运算(中括号中可以包含空格)例如叮嘱echo$[1+2],将输出结果3
(2)关系运算符-eq:数值相等-ne:数值不相等-ge:数1大于等于数2Tt:数1小于数2-gt:数1大于数2-le:数1小于等于数2输入test1-It2echo〃yes〃则打印yes
(3)布尔运算-a(and)两状况同时成立!test-r-x file,则file同时具有r和x权限时,才为true~o(or)两状况任何一个成立!test-r-x file,则file具有r或x权限时,就为true!相反状态,test!-r file,当file不具有r权限时,就为true
(4)字符串运算符=两个字符串相等!二两个字符串不相等-z空串-n非空串输入test〃a〃=〃a〃echo〃yes〃则打印yes
(5)测试文件状态的条件表达式:-e是否存在-d是书目-f:是文件-L符号连接-S文件非空-r可读-x可执行-w可写
2.shell条件语句1if...fi语句结构if[条件1件then执行程序fi例子#!/bin/bashdeclare-i a=10declare-i b=20if[$a==$b];then echo〃a isequal to b〃fiif[$a!=$b];then echo〃a isnot equaltob〃fi输出结果为a isnot equaltob2if...else...fi语句结构if[条件1];then执行程序1else执行程序2fi例子#!/bin/bashdeclare-i aecho〃input1or2”read aif[[$a-eq1]];thenecho”1〃elseecho〃2〃fi打印为input1or2113if...elif...else...fi语句结构if[条件1];then执行程序1。