linux shell脚本语言基础知识.docx
以上例子,一样可以输出hellowor1d。e.若有空格符可以运用双引号或单引号将变量内容结合起来,但必需留意,双引号的特殊字符可以保有变量的特性,但是单引号内的特殊字符则仅为一般字符。#name="$1.OGNAMEishh*/rootishhMaIne='$1.OGNAMEishh,/S1.OGNMEishhf.通常大写字符为系统预设变量,自行设定的变量可以运用小写字符<2)取消变量:用UnSet变量名binbash#helloworld例子a=z,helIoworld”unsetaecho$a以上例子将不会打印出任何东西。3.Sheu特殊变量$0:执行的脚本的文件名$1:脚本文件的第一个参数名:传递到脚本的参数个数$*:以一个单字符串显示全部向脚本传递的参数$:脚本运行的当前进程ID号$:显示最终吩咐的退出状态,。表示没有错误,其它值表示有错误例子a.sh#!binbasha=l+ldeclare-ib=l+lecho$aecho$b执行后输出结果为1+125.条件测试在写SheIl脚本时,经常遇到的问题就是推断字符串是否相等,可能还要检查文件状态或进行数字测试,只有这些测试完成才能做卜.一步动作。test吩咐就是用于测试字符串,文件状态和数字的.test吩咐两种格式:testcondition或condition运用方括号时.,要留意在条件两边加上空格三.shell脚本编程基础学问1.shell基本运算符(1)算术运算符÷:对两个变量做加法。b=let1+2。然后用echo$b来输出b的值。假如没有let,则会输出1+2。c,用$口表示数学运算。将一个数学运算写到$口符号的中括号中,中括号中的内容将先进行数学运算(中括号中可以包含空格例如吩咐echo$1+2,将输出结果3。(2)关系运算符-eq:数值相等-ne:数值不相等-ge:数1大于等于数2Tt:数1小于数2-gt:数1大于数2Te:数1小于等于数2输入test1-It2&&echo"yes"则打印yes(3)布尔运算-a:(and)两状况同时成立!test-r-file»则fiIe同时具有r和X权限时,才为true。-0:(or)两状况任何一个成立!test-r-file,则file具有r或X权限时,就为true0!:相反状态,test!-rfile,当fiIe不具有r权限时,就为true。(4)字符串运算符=:两个字符串相等!=:两个字符串不相等-z:空串-n:非空串输入test"a"=*a*&&echo"yes"则打印yes(5)测试文件状态的条件表达式:(2) if.else.fi语句结构if条件1;then执行程序1else执行程序2fi例子:#!binbashdeclare-iaechowinput1or2”readaif$a-eq1;thenechoTelseecho"2"fi打印为input1or211(3) if.elif.else.fi语句结构if条件1:then执行程序1elif条件2;then执行程序2else执行程序3fi例子:#!/bin/bashdeclare-ia=10declare-ib=2Oif$a=Sb;thenecho*aisequaltob”elif$a-gt$b;thenecho“aisgreaterthanb”elseecho“aislessthanb*fi输出结果为:aislessthanb(4) case.esac语句结构case$变量名称in“第一个变量内容”)程序1*“其次个变量内容”)程序2*)其它程序exit1csac例子:#!/bin/bashecho*youlike”echo*1isapple”echo"2isorange*echowinputyourchoice”readacase$ain1)echo“youlikeapple”*,2)echo"youlikeorange”,*)echo“you1ikenothing”exit1esac执行后结果为:youlike1 isapple2 isorangeinputyourchoice1youlikeapple3 .shell循环类型(1) for循环循环操作项目清单。重复一组吩咐列表中的每个项目。语法一:for(初始值;限制值;执行步阶)do程序done初始值:变量在循环中的起始值限制值:当变量值在这个限制范围内时,就接着进行循环执行步阶:每作一次循环时,变量的变更量例子:S!binbashdeclare-iSs=0for(i=l;i<=100;i+)dos=s+idoneecho"thesumis$s”输出结果为:thesumis5050语法二:forvarinconicon2con3./var是一个变量do程序clone第一次循环时,$var的内容为coni其次次循环时,$Var的内容为Con2第三次循环时,$Var的内容为con3例子:#!/bin/bashdeclare-aA=(l2345678910)declare-icforiin13579doc=c+A$i;cloneecho“thecountis$c”输出结果为:thecountis30(2) while循环While循环,使您能够重复执行一组吩咐,直到某些条件发生。它通常用于当你须要反及操纵的变量值。语法如下:while条件do程序done当条件成立的时候进入While循环,直到条件不成立时才退出循环例子:#!/bin/bashdeclare-ia=0whiIe$a-It10doechoSaa=a+ldone这将产生以卜结果:0123456789每一次执行这个循环,变量a进行检查,看该值是否小于10。假如a的值小于10,则输出该值(3) until循环完备的状况卜,你须要执行的一组吩咐某个条件为真时,While循环执行。有时候,你须要执行一组吩咐,直到某个条件为真。语法如下:until吩咐do程序done这种方式及WhiIe循环恰恰相反,当吩咐成立的时候退出循环,否则接着循环例子:#!/bin/bashdeclare-ia=0until$a-gt10doecho$aa=a+ldone这将产生以卜结果:01234789(4) select循环语法如下:selectvarinword1word2do程序done例子:#!/bin/bashecho”whatisthis”selectiinteacofeewaterappleorangenonedocase$iintealcofeewater)echo“drink”*,appleorange)echo“fruit”none)break*)echo"ERROR:Invalidselectionesacdone打印信息为:whatisthis1) tea2) cofee3) water4) apple5) orange6) none#1drink#6四.shell数组shell数组的运用$a=(1233435)$echo$a/默认获得第一个元素123$echo$(al/通过下标访问$echo$(aQ)/访问整个数组,或者*获得整个数组1233435$echo$#a/获得数组的长度4$echo$(#a3/获得字符串长度1$echo$a0:l:2/切片方式获得一部分数组内容343$echo$a:2/从其次个元素起先35$echo$(ag:2)/到其次个元素12334应用实例:#!/bin/bashdeclare-aa=(l2345)for(i=0;i<=4;i+)doecho$aidone这将产生以下结果:1五:Sheil函数运用函数来执行重复性的任务,是一个很好的方式来创建代码的重用。代码重用是现代面对对象编程的原则的重要组成部分。I.创建函数:声明一个函数语法:function_name()listofcommands)函数名function_name,这就是你将运用它从其他地方在你的脚本调用。函数名必需遵循括号内,后括号内的吩咐的列表。例子:S!binbash# DefineyourfunctionhereHello()echo*HelloWorld*# InvokeyourfunctionHelIo当你想执行上面的脚本,它会产生以下结果:HelIoWorld2 .参数传递给函数:你可以定义一个函数,它接受参数,而调用这些函数。将这些参数代表$1,$2,依此类推。例子:S!binbash# DefineyourfunctionhereHel100echo*HelloWorldSl$2”# 1nvokeyourfunctionIlelIoZhangIisi这将产生以卜结果:HelIoWorldZhangIisi3 .从函数的返回值:例子:#!/bin/bash# DefineyourfunctionhereHelloO(echovHelloWorld$1$2”return1)# 1nvokeyourfunctionHelloZhangsanIisi# Capturevaluereturndbylastcommandr=$echo”Returnvalueis$r”这将产生以下结果:HelIoWorldZhangSanIisiReturnvalueis14.嵌套函数:函数更好玩的功能之一是,他们可以调用本身以及调用其他函数。被称为递归函数调用自身的函数.例子:#!/bin/bash# CallingonefunctionfromanotheroneO(echo“Thisisthefirstfunction*two)twoOecho”Thisisthesecondfunction)# Callingfunctionone.one这将产生以下结果:ThisisthefirstfunctionThisisthesecondfunction