shell编程-总结

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第7章Linux中的shell编程1知识要点1.Shell编程介绍2.变量、表达式3.流程控制|函数|数组第7章Linux中的shell编程21.Shell脚本基本结构#!/bin/bash#脚本必须以#!开始#!表示:/bin/bash将执行该脚本文件中的程序#表示此后的字符串为注释脚本支持:变量、表达式、流程控制、函数、注释各种外部命令和程序调用、命令行参数、系统变量等等。脚本就是将上述各种元素通过一定的逻辑关系进行组装已完成特定任务的程序。第7章Linux中的shell编程31.Shell脚本及运行step1.利用vi编辑如下脚本并保存成first.sh#!/bin/bashecho“Hello,welcometoLinuxworld”echo“Todayis:$(date)”Step2.设置执行权限:chmodu+xfirst.shStep3.执行脚本:./first.sh或shfirst.sh或bashfirst.sh第7章Linux中的shell编程42.Shell变量及表达式---变量类型A.环境变量(系统工作环境需要的全局变量)$PATH,$BASH,$HOME,$PWD,$TERM,$PWDB.自定义变量(仅在脚本中使用局部变量)语法格式:变量名=变量值#变量名约定大写例如:A=10;echo$ASA=“helloLinux”;echo$SAC.只读变量readonly变量名D.导出局部变量export变量名或者export变量名=变量值E.函数中的同名局部变量:local变量名=变量值第7章Linux中的shell编程52.Shell变量及表达式--注意问题几个注意问题:A.变量指向一个字符串(含有空格),则变量值必须使用双引号括起来。例如:SA=“HelloLinux”B.引用时变量前加$,单引号和双引号的区别echo‘Oh$SA$SA’;echo“Oh$SA$SA”C.清除不需要的变量:unset变量名如:unsetSA第7章Linux中的shell编程62.Shell变量及表达式--位置参数(程序的参数)何为位置参数?分析如下的命令调用cat/etc/passwd;cp/root/a.c/home/me/b.c命令/程序引用方式:$0参数:引用方式$1以此类推:$0,$1,$2$*:表示所有位置参数$#:表示位置参数的个数$@:同$*第9个以后的参数:${10},${11}命令行中常用:$?命令执行后返回的状态$!后台运行的最后一个进程号$$当前进程号第7章Linux中的shell编程72.Shell变量及表达式--位置参数(程序的参数)一个关于命令位置参数的脚本文件arg.sh#!/bin/bashecho“完整的命令行:$0$*”echo“程序是:$0”echo“所有的参数:$*”echo“参数个数:$#”if[$#-ge1];thenecho“第1个参数:$1”fi问题:如果参数没输入,但程序中需要怎么办?第7章Linux中的shell编程82.Shell变量及表达式–缺省参数(位置替换)比如脚本mycal.sh56+;mycal.sh56*如果没有输入+或者*,我能否默认取为+呢?而不是认为程序执行出错呢?VAR=${参数-word}:有则用参数,否则用wordVAR=${参数=word}:有则用参数,否则两个用wordVAR=${参数?word}:有则用参数,否则报错退出VAR=${参数+word}:有则用word,否则不做注意:上述四条经常用在位置参数的使用上。第7章Linux中的shell编程92.Shell变量及表达式–缺省参数(位置替换)脚本mycal.sh#!/bin/bashLEFT=${1-1}#第1个位置参数,缺省为1RIGHT=${2-1}#第2个位置参数,缺省为1FUHAO=${3-+}#第3个位置参数,缺省为+case“$FUHAO”in+)RE=`expr$LEFT+$RIGHT`;;-)RE=`expr$LEFT-$RIGHT`;;esacecho“$LEFT$FUHAO$RIGHT=$RE”第7章Linux中的shell编程102.Shell变量表达式概述Shell中的变量表达式主要利用各种测试语句、条件来获得字符串、文件、数字等所处的状态。表达式的操作符主要包括:字符操作符:=,!=,-n,-z数字操作符:-eq,-ne,-ge,-gt,-le,-lt==,!=,=,,=,逻辑操作符:!,-a,-o文件操作符:-d,-f,-L,-r,-w,-x,-s,-e,-z,-c,-b,-o可以使用test命令来测试上述各种表达式状态。第7章Linux中的shell编程112.Shell变量表达式概述字符串:A=abcd;test$A=abcd;echo$?A=““;test–z$A;echo$?test–n$A;echo$?test–z“$A”;echo$?数字比较:A=1234;test$A–eq1234;echo$?test$A–gt1000;echo$?逻辑比较:test-f/etc/passwd–a–s/etc/passwdtest-d/root;echo$?test!–z/etc/passwd;echo$?第7章Linux中的shell编程123.Shell脚本流程控制Shell支持的流程控制语句主要有:分支语句:ifelifelsefi,case…esac循环语句:for,while,until函数定义:functionfunname()第7章Linux中的shell编程133.Shell脚本流程控制—分支语句if单分支if[条件]then语句fi或者if[条件];then语句fi或者if((条件));then语句fi或者if((条件))then语句fi第7章Linux中的shell编程143.Shell脚本流程控制—分支语句if双分支if[条件]then语句else语句fi多分支if[条件];then语句elif[条件];then语句else语句fi注意:[条件]中,条件前后必须留有一个空格[];then连在一起写,必须加上分号;第7章Linux中的shell编程153.Shell脚本流程控制—分支语句casecase表达式inexpr-1)命令1;;expr-2)命令2;;…*)其他命令esacecho-n“InputA=“readAcase$Ain1)echo“select11”;;2)echo“seelct22”;;*)echo“selectelse”;;esac第7章Linux中的shell编程163.Shell脚本流程控制—分支语句caseecho-n“InputA=“readAcase$Ain“fuzhoucity”)echo“select11”;;“xiamencity”)echo“seelct22”;;*)echo“selectelse”;;esac注意:如果是字符串变量且含有空格,则必须在匹配位置加上引号,如”fuzhoucity”第7章Linux中的shell编程173.Shell脚本流程控制—分支语句(菜单式)OPTIONS=“fuzhouxiamen”selectoptin$OPTIONS;docase“$opt”infuzhou)echo“selectfuzhou”;;xiamen)echo“selectxiamen”;;*)exit;;esacdone注意:可能没有循环执行!第7章Linux中的shell编程183.Shell脚本流程控制—循环控制forfor变量[in数值列表]#foriin1234do#省略[]则表示取编所有位置参数命令donelen=10;#指定循环次数for((i=0;i“$len”;i=i+1))do命令done例子:实现1加到100sum=0for((i=1;i101;i=i+1))doletsum=sum+$idoneecho$sum第7章Linux中的shell编程193.Shell脚本流程控制—循环控制whilewhile条件命令为真do命令donewhile:#无限循环do命令done例子:实现1加到100k=1sum=0while[$k–le100]doletsum=$sum+$kletk++doneecho$sum第7章Linux中的shell编程203.Shell脚本流程控制—循环控制untiluntil条件命令为假do命令doneuntil:#无限循环do命令done例子:实现1加到100k=1sum=0until[$k–gt100]doletsum=$sum+$kletk++doneecho$sum第7章Linux中的shell编程213.Shell脚本流程控制—循环控制例子:实现1加到100sumfor=0for((i=1;i=100;i++))doletsum=sum+$idoneecho$sumfori=1sum=0while(($i=100))doletsum=sum+$ileti++doneecho$sumi=1Sum=0until(($i100))doletsum=$sum+$ileti++donedcho$sumleti++i=`expr$i+1`i=$(($i+1))let“i=$i+1”while[$i–le100]while(($i=100)第7章Linux中的shell编程223.Shell脚本流程控制—函数functionfunname(){[return整数]}例1:functionsum(){return$($1+$2)}如果没有return则最后一条命令的返回值就是函数的返回值。funname(){}注意:[1]函数必须先声明,才能调用[2]函数中的变量同全局变量名相同时,则使用localval=value定义局部变量[3]无需(不能)定义参数第7章Linux中的shell编程233.Shell脚本流程控制—函数#!/bin/bashgsum=0functionsumn(){sum=0for((i=1;i=$1;i++))doletsum=$sum+$idonegsum=$sumreturn$sum}sumn10echo“sum=$?”调用注意:[1]直接传递参数如sumn10[2]函数就是命令,返回值只能通过$?获取如echo“sum=$?”[3]如果需要返回变量值,则通过全局变量带回值如gsum第7章Linux中的shell编程243.Shell脚本流程控制—函数#!/bin/bashgsum=0functionsumn(){localgsum=0for((i=1;i=$1;i++))doletgsum=$gsum+$idonereturn$gsum}sumn10echo“sum=$?”echo$gsum调用注意:[1]全局变量和局部变量的使用区别如gsum第7章Linux中的shell编程253.Shell脚本流程控制—数组[1]定义:A=(元素列表,空格隔开)下标从0开始如A=(abcd)[2]数组长度${#A[*]}[3]引用第i个元素${A[$i]}[4]赋值A[$i]=value[5]以字符串输出所有元素echo${A[*]}[6]循环输出所有元素Len=${#A[*]}for((i=0;i$Len;i++))doecho${A[$i]}done或者forvaluein${A[*]}doecho$valuedone第7章Linux中的shell编程263.Shell脚本流程控制—序列函数seq生成从1到100的100个元素的数组:A=seq100#seq1toB=seq1100#seqfromto第7章Linux中的shell编程27细节问题1:整数的四则运算A=10B=20C=`expr$A+$B`C=`expr$A\*$B`D=$(($A+$B))D=$(($A*$B))D=$((A+B))D=$[$A+$B]D=$[A+B]letE=A+BletE=A*B((F=A+B))((F=A*B))l

1 / 28
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功