CH02-shell程序的设计教学课件_第1页
CH02-shell程序的设计教学课件_第2页
CH02-shell程序的设计教学课件_第3页
CH02-shell程序的设计教学课件_第4页
CH02-shell程序的设计教学课件_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CH02shell程序的设计怎样思想,就有怎样的生活CH02shell程序的设计CH02shell程序的设计怎样思想,就有怎样的生活第2章Shell程序设计主要内容ShellOverviewWhatisShell?WhyShell?创建和执行Shell程序Shell程序设计的语法变量、条件测试、条件语句、重复语句、命令表和语句块、函数…实例第2章Shell程序设计主要内容ShellOverviewWhatisShell?WhyShell?创建和执行Shell程序Shell程序设计的语法变量、条件测试、条件语句、重复语句、命令表和语句块、函数…实例基本命令(1)文件操作列出目录内容:ls创建特殊文件:mkdir,mknod,mkfifo文件操作:cp,mv,rm修改文件属性:chmod,chown,chgrp查找文件:find字符串匹配:grep其它:pwd,cd,file,more,less,head,tail,cat,gzip,zip,tarlinux.chinaitlab/special/linuxcom/基本命令(2)进程操作ps,kill用户和组账号操作useradd,userdel,groupdel,passwd网络命令ifconfig,ping,netstat,telnet其他who,whoami,su,sudo,uname,…manmountunmountdu,df文件权限%ls-ltotal161-rwxr-xr-x1mingminggroup117878a.out-rw-r--r--1mingminggroup15053testdrw-r-xr-x1mingminggroup1512dsa...-rwxrwxrwxafileuser(owner)groupother(world)fileugo161blocksindiskareoccupiedbythesefiles文件权限(续)-rw-r--r--user(you)groupother(world)fileafileyoucreater-readw-writex-executeAfiledoesnothaveexecutablepermissionbydefault,notevenfortheowner目录权限drwxr-xr-xuser(you)groupother(world)directoryadirectoryyoucreate目录权限(续)目录权限读

–可以列出存储在该目录下的文件写

–允许从目录中删除或添加新的文件执行

–允许在目录中查找,并能用cd命令将工作目录改到该目录:cat/u/mingming/emails/e1.txtchmod:改变文件或目录的存取权限chmodu+xfile1.txt

xpermissionforownerchmodugo+xfile1.txt xpermissionforallchmoda+xfile1.txt xpermissionforallchmoda-xfile1.txt removexpermissionforallchmoda-rwxfile1.txt removeallpermissionsforall(文件的权限只能被创建者或超级用户修改)chmod命令(续)chmoda+r,u+wfile1.txtchmoda=rfile1.txtchmodu=rwxfile1.txtchmod命令(续)用8进制数表示读权限-4写权限-2可执行权限-1chmod666file1.txt

isthesameaschmoda=rwfile1.txtchmod644file1.txt

(setrforallandwforuseronly)chmod777file1.txtchmod000file1.txtchmod命令(续)改变多个文件的权限chmod755file1file2file3递归操作(-R)chmod-R700emails

chmod-R700.umask的作用思路扩展……1.ShellOverviewShell用户和操作系统之间的接口作为核外程序而存在文件子系统用户硬件控制硬件内核Shell用户用户用户高级语言和实用程序系统调用进程管理子系统进程间通信存储管理调度程序设备驱动程序字符设备块设备高速缓存核外程序Shell:用户和操作系统之间的接口Shell:用户和操作系统之间的接口csh其它程序bashX窗口系统Shell:作为核外程序而存在内核Shell的双重角色命令解释程序Linux的开机启动过程;进程树Shell的工作步骤打印提示符;得到命令行;解析命令;查找文件;准备参数;执行命令独立的程序设计语言解释器(reusabletools)各种不同的Shellshell名称描述位置ash一个小的shell/bin/ashash.static一个不依靠软件库的ash版本/bin/ash.staticbshash的一个符号链接/bin/bshbash“BourneAgainShell”。Linux中的主角,来自GNU项目/bin/bashshbash的一个符号链接/bin/shcshCshell,tcsh的一个符号链接/bin/cshtcsh和csh兼容的shell/bin/tcshkshKornShell/bin/kshUNIX’sPhilosophy(Examples)RedirectionUse“echo”tocreateafile?PipeGetthecountoffilesinadirectory?重定向输出系统定义三个标准文件:标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr),对应的文件描述符为0,1,2。用“>”改变输出,用“2>”改变错误输出,用“>>”来追加到已有的文件中。重定向输出示例$ls–l>lsoutput.txt$ls–l1>lsoutput.txt$ps>>lsoutput.txt$kill–HUP1234>killout.txt2>killerr.txt$kill–l1234>killout.txt2>&1(把标准输出和错误输出都放入同一个文件)$catbar2>/dev/null(youseenothing)重定向输入标准输入有3种来源:thekeyboard(default),afile,andapipewc<newfiletheshellopensthefilenewfilewcnewfilethecommandopensthefilenewfilewc<newfile>result

(wccountsthenumberoflines,words,andcharactersinafile)管道(pipe)可以用管道操作符|来连接进程。允许连接的进程数目是没有限制的。前一个命令的输出是后一个命令的输入。who>userlistwc-l<userlistwho|wc-l(withoutusingapipe)(whoissaidtobepipedtowc)command1|command2|…|commandn管道(pipe)(续)ls-l

/etc|sort-r|moresort-rsortsthelistinginreverseordermoredisplaysthecontentsofatextfileontheterminal,onescreenfulatatimecat/etc/passwd|sort-r|grep“/bin/csh”|wc-lhowmanyusershavebeensetthedefaultshellofcsh?2.创建和执行Shell程序编写脚本文件执行脚本文件运行环境编写脚本文件脚本文件注释、退出码(exitcode)#!/bin/sh#Hereiscommentsforfilein*doifgrep–qPOSIX$filethenmore$filefidoneexit0执行脚本文件方法1:$shscript_file方法2:$chmod+xscript_file$./script_file用户环境.bash_profile,.bash_logout,.bashrcfiles.bash_profile:用户登录时被读取,其中包含的命令被bash执行.bashrc:启动一个新的shell时读取并执行.bash_logout:登录退出时读取执行3.Shell程序设计的语法变量条件测试条件语句重复语句命令表和语句块函数其它3.1变量用户变量环境变量参数变量和内部变量用户变量变量的赋值和使用var=valueecho$varread命令readvariable引号的用法双引号,单引号转义符“\”环境变量环境变量说明$HOME当前用户的登陆目录$PATH以冒号分隔的用来搜索命令的目录清单$PS1命令行提示符,通常是”$”字符$PS2辅助提示符,用来提示后续输入,通常是”>”字符$IFS输入区分隔符。当shell读取输入数据时会把一组字符看成是单词之间的分隔符,通常是空格、制表符、换行符等。参数变量和内部变量环境变量说明$#传递到脚本程序的参数个数$0脚本程序的名字$1,$2,…脚本程序的参数$*一个全体参数组成的清单,它是一个独立的变量,各个参数之间用环境变量IFS中的第一个字符分隔开$“$*”的一种变体,它不使用IFS环境变量。条件测试退出码test命令testexpression或[expression]test命令支持的条件测试字符串比较算术比较与文件有关的条件测试逻辑操作字符串比较字符串比较结果str1=str2两个字符串相同则结果为真str1!=str2两个字符串不相同则结果为真-zstr字符串为空则结果为真-nstr字符串不为空则结果为真算术比较算术比较结果expr1–eqexpr2两个表达式相等则结果为真expr1–neexpr2两个表达式不等则结果为真expr1–gtexpr2expr1大于expr2则结果为真expr1–geexpr2expr1大于或等于expr2则结果为真expr1–ltexpr2expr1小于expr2则结果为真expr1–leexpr2expr1小于或等于expr2则结果为真if

test$#-ne3;thenecho“youdidnotenterthreearguments”elseecho“youenteredtherightnumber”fi与文件有关的条件测试文件条件测试结果-efile文件存在则结果为真-dfile文件是一个目录则结果为真-ffile文件是一个普通文件则结果为真-sfile文件的长度不为零则结果为真-rfile文件可读则结果为真-wfile文件可写则结果为真-xfile文件可执行则结果为真if[-f$1];then echo“Fileexists”else echo“Filedoesnotexist”fi逻辑操作逻辑操作结果!expr逻辑表达式求反expr1–aexpr2两个逻辑表达式“And”(“与”)expr1–oexpr2两个逻辑表达式“Or”(“或”)3.3条件语句if语句case语句if语句(1)形式if[expression]then statementselif[expression]then statementselif…else statementsfi紧凑形式;(同一行上多个命令的分隔符)if语句(2)例1(.bash_profile文件中)if[-f~/.bashrc];then.~/.bashrcfi例2#!/bin/shecho“Isthismorning?Pleaseansweryesorno.”readanswerif[“$answer”=“yes”];thenecho“Goodmorning”elif[“$answer”=“no”];thenecho“Goodafternoon”elseecho“Sorry,$answernotrecognized.Enteryesorno”exit1fiexit0case语句(1)形式casestrin str1|str2)statements;; str3|str4)statements;; *)statements;;esaccase语句(2)Example#!/bin/shecho“Isthismorning?Pleaseansweryesorno.”readanswercase“$answer”inyes|y|Yes|YES)echo“Goodmorning!”;;no|n|No|NO)echo“Goodafternoon!”;;*)echo“Sorry,answernotrecognized.”;;esacexit0#!/bin/shtputclearecho“\n1.Findfilesmodifiedinlast24hours\n2.Thefreediskspace\n3.Spaceconsumedbythisuser\n4.Exit\n\n”echo“SELECTION:\c”readchoicecase$choicein 1)find$HOME-mtime-1-print;; 2)df;; 3)du-s$HOME;; 4)exit;; *)echo“Invalidoption”;;esaccase语句(3)case语句(4)Usingwildcardsecho“Doyouwishtocontinue?(y/n):\c”readanswercase$answerin [Yy][Ee]*);;#matchesYES,yes,Yes,etc [Nn][Oo])exit;;#matchesNO,No,no,nO *)echo“Invalidoption”;;esaccase语句(5)Usingwildcardsfile=`ls–t*.java*.c2>/dev/null|head-1`case$filein *.c)gcc$file&&a.out;; *.java)javac$file;; *)echo“NoJavaorCprogramfound”;;esacThefirststatementselectsthelastmodified.cor.javafileandstoresthevalueinthevariablefile3.4重复语句for语句while语句until语句for语句(1)形式forvarinlistdo statementsdone适用于对一系列字符串循环处理forfileinchap20chap21chap22do cp$file$file”.bak” echo$filecopiedto$file”.bak”donefor语句(2)forfilein*.html*.htmdo

gzip$filedoneforfilein*.cdo gcc–o$file”x”$filedoneAppendxtoeachCprogramfilenametobecometheoutputexecutablefilenamewhile语句(1)形式whileconditiondo statementsdonewhile语句(2)Examplequit=nwhile[“$quit”!=“y”];doreadmenu_choicecase“$menu_choice”ina)do_something;;b)do_anotherthing;;…q|Q)quit=y;;*)echo“Sorry,choicenotrecognized.”;;esacdoneuntil语句形式untilconditiondo statementsdoneNotrecommended(whilestatementispreferred)3.5命令列表和语句块命令列表命令组合语句块命令表命令组合分号串联command1;command2;…条件组合AND命令表

格式:statement1&&statement2&&statement3&&…OR命令表

格式:statement1||statement2||statement3||…grep"john"e.lst&&echo“patternfound”9876,johnwarren,nsw8769,johnhoward,act6758,eltonjohn,taspatternfoundgrep"john"f.lst||echo“patternnotfound”patternnotfound语句块形式{statement1statement2…}或{statement1;statement2;…;}3.6函数形式func(){statements}局部变量local关键字函数的调用funcpara1para2…返回值return函数的例子(1):定义函数的例子(2):使用3.7其它杂项命令break,continue,exit,return,export,set,unset,trap,“:”,“.”,…捕获命令输出算术扩展参数扩展即时文档杂项命令break:从for/while/until循环退出continue:跳到下一个循环继续执行exitn:以退出码”n”退出脚本运行return:函数返回export:将变量导出到shell,使之成为shell的环境变量set:为shell设置参数变量unset:从环境中删除变量或函数trap:指定在收到操作系统信号后执行的动作“:”(冒号命令):空命令“.”(句点命令)或source:在当前shell中执行命令export命令脚本程序export1:脚本程序export2:expr命令expr

命令将它的参数当作一个表达式来求值expr3+5(注意空格)x=3;y=5

expr$x-$y

expr$y/$xset命令set命令的作用是为shell设置参数变量捕获命令输出语法$(command)`command`举例#!/bin/shecho“Thecurrentdirectoryis$PWD”echo“Thecurrentdirectoryis$(pwd)”exit0算术扩展expr命令$((…))扩展#!/bin/shx=0while[“$x”–ne10];doecho$xx=$(($x+1))doneexit0参数扩展问题:批处理1_tmp,2_tmp,…方法#!/bin/shi=0while[“$i”–ne10];dotouch“${i}_tmp”i=$(($i+1))doneexit0参数替换的复杂形式here文档(及时文档)在shell脚本中向一条命令传送输入数据Example#!/bin/bashcat<<!CATINPUT!Hello,thisisaheredocument.!CATINPUT!4.实例分析Install脚本CD唱盘管理程序#!/bin/bash##安装eclipse2.1.2脚本(eclipse2.1.2installshell)#filename:ei.sh(eclipse2.1.2)#/*...usethiscommandtolistzipfile...*/#unzip-leclipse-SDK-2.1.2-Linux-gtk.zip#/*...eXPorttheeclipseinstallDirectory(ECLPDIR)...*/exportECLPDIR=/dataunzip-d$ECLPDIReclipse-SDK-2.1.2-linux-gtk.zipunzip-d$ECLPDIReclipse-examples-2.1.2.zipunzip-d$ECLPDIRcdt-full-1.2-linux-gtk.zipunzip-d$ECLPDIR/eclipseemf_1.1.1_20031020_1612WL.zipunzip-d$ECLPDIR/eclipseemf.source_1.1.1_20031020_1612WL.zipunzip-d$ECLPDIR/eclipseemf.doc_1.1.1_20031020_1612WL.zipunzip-d$ECLPDIR/eclipseuml2_200312011515.zipunzip-d$ECLPDIR/eclipseuml2.examples_200312011515.zipunzip-d$ECLPDIR/eclipsexsd_1.1.1_20031020_1612WL.zipunzip-d$ECLPDIR/eclipsexsd.doc_1.1.1_20031020_1612WL.zipunzip-d$ECLPDIR/eclipsexsd.source_1.1.1_20031020_1612WL.zipunzip-d$ECLPDIR/eclipseGEF-SDK-I20031015.zipunzip-d$ECLPDIR/eclipseGEF-Automated-Tests-I20031015.zipunzip-d$ECLPDIR/eclipseGEF-examples-I20031015.zipunzip-d$ECLPDIReclipse2.1.1-SDK-Linux-gtk-LanguagePackFeature.zipexportECLPDIR=/home/repository/eclipse/workspace运行eclipse#!/bin/bash#执行eclipseexportJAVA_HOME=/usr/java/jdk1.6.0_12exportCLASSPATH=/usr/java/jdk1.6.0_12/lib/opt/eclipse/eclipse-vm/usr/java/jdk1.6.0_12/bin/java-data~/workspace&#-vm参数用以指定使用哪

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论