Linux_Shell编程基础.ppt
Linux Shell编程基础编程基础授课:杨建新脚本编程脚本编程传统的DOS批处理文件(*.bat)Windows脚本:vbscript(*.vbs)Javascript(*.js)UnixShell脚本指定脚本执行所使用的指定脚本执行所使用的shell1.如果Script的第一个非空字符不是#,则它会使用BourneShell。2.如果Script的第一个非空字符是#时,但不以#!开头时,则它会使用CShell。3.如果Script以“#!”开头,则“#!”后面所写的就是所使用的Shell,而且要将整个路径名称指出来*建议使用第3种方法执行执行shell脚本程序的方法脚本程序的方法shellnamescriptname.scriptname在在shell中使用变量中使用变量BourneShell的变数类型只有字串变量,所以要使用数值运算则必须靠外部命令达到目的 变量主要包括用户变量和系统变量两类为变量赋值:var=string取用变量时则在变量名称前加上一“$”号如果需要处理数值运算,可以使用expr命令 expr用法用法expr一般用于整数值计算,常用于程序计数器,实例如下:expr10+10expr10*10expr30/10常用系统变量常用系统变量$HOME使用者自己的目录$PATH执行命令时所搜寻的目录$TZ时区$MAILCHECK每隔多少秒检查是否有新的信件$PS1在命令列时的提示号$PS2当命令尚未打完时,Shell要求再输入时的提示号$MANPATHman指令的搜寻路径 实例实例1#!/bin/shname=yangecho$nameecho$PATHPATH=$PATH:$HOME/binecho$PATHi=0i=expr$i+3echo$i使用特殊变量使用特殊变量$0这个程序的执行名字$n这个程序的第n个参数值,n=1.9$*这个程序的所有参数$#这个程序的参数个数$这个程序的PID$!执行上一个背景指令的PID$?执行上一个指令的返回值使用shift命令可以将参数后移实例实例2:testvar#!/bin/sh echoFilename:$0 echoArguments:$*echoNumberofargs.:$#echo2ndarg.:$2shiftechoNumberofargs.:$#echo2ndarg.:$2 sethello,world echoArguments:$*echo2ndarg.:$2执行sh testvar this is my shell script获取用户输入获取用户输入使用read命令可以获取用户的输入并赋予变量readvar1var2.实例实例3#!/bin/shechoPleaseinputyourname:readnameechoYournameis:$name条件测试条件测试测试文件状态-d:目录-s:文件非空-f:正规文件-w:可写-L:符号链接-u:文件有suid位-r:可读-x:可执行条件测试条件测试比较表达式-eq=字符串:-ne!=-gt-n:非空串-lt-z:空串-le=条件测试条件测试逻辑操作-a,&-o,|!条件测试条件测试#-f/etc/passwd-a-f/etc/inittab#echo$?0#-x/etc/passwd-o-x/bin/sh#echo$?0流程控制流程控制:分支结构分支结构if.then.elsefiif.then.elif.thenficasevarinstring1)command.;*)command.;esac实例实例4#!/bin/shuntilechoListDirectory.1echoChangeDirectory.2echoEditFile.3echoRemoveFile.4echoExitMenu.5echoPleaseinputyourchoice:readchoicetest$choice=5docase$choicein1)ls;2)echoEntertargetdirectoryreaddircd$dir;3)echoEnterfilenamereadfilevi$file;4)echoEnterfilenamereadfilerm$file;q|Q|5)echoGoodbyeexit;*)echoillegalOptionesacdone流程控制流程控制:循环结构循环结构for循环:forvarinlistdocommands.donewhile循环:whileconditiondocommands.done流程控制流程控制:循环结构循环结构until循环:untilcondition-is-truedocommands.done循环控制:break,continuebreak:跳出循环或case语句continue:跳过本次循环实例实例5#!/bin/shnumber=1while$number-le10douseradduser$numberechoAddauserwhosenameis:user$numbernumber=expr$number+1done建立10个用户帐户实例实例6#!/bin/shcounterf=0counterd=0forfilesin*doif-f$files;thencounterf=expr$counterf+1elif-d$files;thencounterd=expr$counterd+1fidoneechoThereare$counterffilesinpwddirectory.echoThereare$counterddirectorysinpwddirectory.查看目录中包含的文件数量和子目录数量