|
Linux下Shell编程 |
|
|
西安理工大学计算机科学与工程学院控制结构篇——case语句格式case值in模式1) 命令1;;… …)命令n ;;esac取值后面必须为单词in,每一个模式必须以右括号结束。取值可以为变量或常数。取值检测匹配的每一个模式,一 旦模式匹配,其间所有命令开始执行直至;;。执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用号捕获该值,再接 受其他输入。示例#!/bin/sh#caseTest#totestthemethodofcaseUSER=` whoami`case$USERinroot)echo“Youcandoalltheoper ations”;;Dave)echo"Youcandosomeoperations” ;;)echo"Sorry,youcannotdo anything";;esac西安理工大学计算机科学与工程学院控制结构篇——fo r循环格式for变量名in列表do命令done当变量值在列表里,for循环即执行一次所有命令,使用变 量名访问列表中取值。嵌套循环可以将一个for循环嵌在另一个for循环里示例#!/bin/sh#forTest# totestthemethodofforCOUNTER=0forFILESindoCOUN TER=`expr$COUNTER+1`doneecho"Thereare$COUNTERfilesin `pwd`"西安理工大学计算机科学与工程学院控制结构篇——until循环格式until条件d o命令doneuntil执行一系列命令,直至条件为真时停止示例#!/bin/sh#until Test#totestthemothodofuntilIS_ROOT=`who|greproot`until[ "IS_ROOT"]doIS_ROOT=`who|greproot`sleep5don eecho"Watchit.rootin!"西安理工大学计算机科学与工程学院控制结构篇——while循环格式w hile命令do命令doneWhile循环用于不断执行一系列命令,也用于从输入文件中读取数据。虽然通常只有一个 命令,但在while和do之间可以放几个命令。命令通常用作测试条件,只有当命令的退出状态为0时,do和done之间命令才被执 行,如果退出状态不是0,则循环终止。示例#!/bin/sh#whileTest#totestthemethodo fwhileCOUNTER=0while[$COUNTER-lt10]doecho$COUNTE RCOUNTER=`expr$COUNTER+1`donewhilereadLINEdoecho $LINEdone所有函数在使用前必须定义,这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它,才可以使用。调用 函数仅使用其函数名即可,要传给函数的变量跟在函数后面。函数里面定义的变量以下划线(_)开始。函数可以放在同一个文 件中作为一段代码,也可以放在只包含函数的单独文件中,文件也必须以#!/bin/sh开头。示例1#!/bin/sh#fun Test#totestthefunctionDATE=`date`Hello(){echo“Hello,to dayis$DATE”}Hello示例2#!/bin/sh#funTest#totestthefunctio n../HelloHelloLinuxidc.comLinux公社(LinuxIDC.com)于2006年9月25日注 册并开通网站,Linux现在已经成为一种广受关注和支持的一种操作系统,IDC是互联网数据中心,LinuxIDC就是关于Linux的 数据中心。LinuxIDC.com提供包括Ubuntu,Fedora,SUSE技术,以及最新IT资讯等Linux专业类网站。 西安理工大学计算机科学与工程学院西安理工大学计算机科学与工程学院西安理工大学计算机科学与工程学院Linux下She ll编程简介刘桂海(西安理工大学计算机科学与工程学院,陕西西安710048)Linuxidc.comLinu x公社(LinuxIDC.com)于2006年9月25日注册并开通网站,Linux现在已经成为一种广受关注和支持的一种操作系统,I DC是互联网数据中心,LinuxIDC就是关于Linux的数据中心。LinuxIDC.com提供包括Ubuntu,Fedora ,SUSE技术,以及最新IT资讯等Linux专业类网站。西安理工大学计算机科学与工程学院西安理工大学计算机科学与工程 学院内容安排综述篇命令篇变量篇条件测试篇控制结构篇函数篇西安理工大学计算机科学与工程学院综述篇Shell是 什么怎样写ShellCygwin简介Linux黑洞西安理工大学计算机科学与工程学院综述篇——Shell是什么壳(S hell)保护其内部的核(Kernel)西安理工大学计算机科学与工程学院综述篇——Shell是什么Shell是一种具备 特殊功能的程序,它是介于使用者和UNIX/Linux操作系统之核心程序(kernel)间的一个接口。为了对用户屏蔽内核的复 杂性,也为了保护内核以免用户误操作造成损害,在内核的周围建了一个外壳(shell)。用户向shell提出请求,shell解释并将请 求传给内核。使用较广的shell有标准的Bourne?shell?(sh)、KornShell(ksh)、C?shell?( csh)、BourneAgainShell(bash)等。查看当前环境所用shell:echo$SHELLshell的另 一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数 组和程序控制结构。shell编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中。本质上,shell ?脚本是命令行命令简单的组合到一个文件里面。Shell基本上是一个命令解释器,类似于DOS下的command.com。它接收用户命 令,然后调用相应的应用程序。西安理工大学计算机科学与工程学院综述篇——怎样写Shell利用vi编辑器编辑脚本,将脚本命名 为脚本功能.shShell脚本不是复杂的程序,它是按行解释的,脚本第一行总是以#!/bin/sh开头,它通知系统以下的She ll程序使用系统上的BourneShell来解释。第二行注释中写入脚本名,第三行注释开始写入脚本功能——习惯。以下行进入脚本 正式编写编写完后给脚本添加执行权限:chmodu+xScripName运行脚本:ScripName 或./ScripName简单脚本示例:viShowHello.sh以下为脚本内容:#!/bi n/sh#ShowHello.sh#Toshowhellotosomebodyecho-n“EnterYour Name:”readNAMEecho“Hello,$NAME!”保存,退出vi编辑器。为脚本添加可执行权限:ch modu+xShowHello.sh运行脚本:ShowHello.sh西安理工大学计算机科学与工程学院综述篇——cy gwin简介cygwin——在windows下开发linux程序!cygwin是一个在windows平台上运行 的linux模拟环境,是cygnussolutions公司开发的自由软件。它把gcc、gdb、gas等开发工具进行了改进,使它们 能够生成并解释win32的目标文件,开发者基于win32api写了一个unix系统库的模拟层,只要把这些工具的源代码和这个共享 库(cygwindll)连接到一起,就可以使用unix主机上的交叉编译器来生成可以在windows平台上运行的工具集。 软件下载:cygwin的官方网站:www.cygwin.com推荐下载:http://www.macraigor.co m/full_gnu.htm软件安装:在安装的过程中可选择默认安装路径:c:\cygwin 安装完后要修改cygwin目录下的cygwin.bat文件,在@echooff 后面加上setCYGWIN=titlentea,这是因为Cygwin的启动批处理 文件需要启动Unix文件系统模拟。西安理工大学计算机科学与工程学院综述篇——Linux黑洞/dev/nu ll是一个虚设的设备,俗称“Linux黑洞”,任何对/dev/null的写入都会成功,但数据会消失得无影无踪,没有 任何反馈。所以经常把不想在屏幕显示的信息全部送到/dev/null中,在shell脚本中用得比较多。如:ls–l>/ dev/null还可以用来清空文件的内容:cat/dev/null>FileNameLinuxidc.comLinu x公社(LinuxIDC.com)于2006年9月25日注册并开通网站,Linux现在已经成为一种广受关注和支持的一种操作系统,I DC是互联网数据中心,LinuxIDC就是关于Linux的数据中心。LinuxIDC.com提供包括Ubuntu,Fedora ,SUSE技术,以及最新IT资讯等Linux专业类网站。西安理工大学计算机科学与工程学院西安理工大学计算机科学与工程 学院命令篇用户管理目录管理文件管理权限管理西安理工大学计算机科学与工程学院命令篇——用户管理新建用户(user add)useraddUserName新建用户后,会在/home目录下建立一个以UserNam e命名的文件夹,用户每次登录时自动定位到该文件夹下。为用户添加密码(password)passwdUserName 删除用户(userdelete)userdelUserName使用–p选项可以删除用户目录 下的文件及与用户相关联的其他文件。新建组群(groupadd)groupaddGroupName删除组群(g roupdelete)groupdelGroupName西安理工大学计算机科学与工程学院命令篇——用户管理 用户身份whoami查看登录用户who[选项]-a显示所有用户的所有 信息-H显示列标题查看用户的操作w某一时刻用户的行为用户间切换(substitute user)suUserName如:su或suroot切换为根用户 suHaison切换为名为Haison的用户西安理工大学计算机科学与工程学院命令篇——目录管理创建目录(maked irectory)mkdirDirecName删除目录(removedirectory)rmdirDi recName显示工作目录(printworkingdirectory)pwd显示目录内容(list) ls[选项]选项:-a显示当前目录下的所有文件,包括以.开头的文件。-l以长列表的形式显示文件 列表,如:-rw-r--r--1haisonhaison18Nov210:10haison .c西安理工大学计算机科学与工程学院命令篇——目录管理改变当前目录(changedirectory) cd或cd~进入登录时的主目录cd/进入根目录cd..进入上一级 目录cd/home进入系统的home目录cdhome进入当前目录下的home目录目录重命名 (move)mvSourceDirecNameTargetDirecName目录拷贝(copy)cp SourceDirecTargetDirec-r拷贝目录下的文件、子目录及子目录下的文件西安理工大学计 算机科学与工程学院命令篇——文件管理新建文件>FileName或touchFileName或viFile Name删除文件(removefile)rm[选项]FileName选项:-i系统提示是否真要删 除该文件-f删除文件之前不提示任何确认信息-r递归删除目录下所有子目录的内容文件拷贝 (copy)cpSourceFileTargetFile文件链接(link)ln–sSour ceFileTargetFile创建文件链接,用ls–l查看,会看到TargetFile->SourceFile 西安理工大学计算机科学与工程学院命令篇——文件管理显示文件内容moreFileName一次一屏的显示文 件内容,空格或回车显示下一屏lessFileName一次一屏的显示文件内容,空格或回车显示下一屏c atFileName一次全部显示文件的内容catfile1file2>file3将fi le1、file2的内容写到file3,覆盖file3原内容catfile1>>file2将fil e1的内容追加到file2,file2原内容不变headFileName只显示文件的前10行 head–nFileName显示文件的前n行tailFileName只显示文件的后10 行tail–nFileName显示文件的后n行nlFileName 以编号的形式一次全部显示文件的内容,忽略空格Linuxidc.comLinux公社(LinuxIDC.com)于2006年9月 25日注册并开通网站,Linux现在已经成为一种广受关注和支持的一种操作系统,IDC是互联网数据中心,LinuxIDC就是关于Li nux的数据中心。LinuxIDC.com提供包括Ubuntu,Fedora,SUSE技术,以及最新IT资讯等Linux专业类 网站。西安理工大学计算机科学与工程学院西安理工大学计算机科学与工程学院命令篇——文件管理文件移动/重命名(mov e)mvSourceFileTargetFile将一个或多个文件移动到另外一个目录下,或者将一个文件重命名为另一个文 件。文件查找(find)find[路径][选项]如:find/-name“Linux”-print 文件内容查找(grep)如:grep“main”haison.c文件类型命令ls–l以长列表形式显示文 件的类型等,如:-rw-r--r--前缀类型前缀类型—普通文件l链接(link)文件b块(block)设备文件 p命名管道(pipe)文件c字符(character)设备文件s本地套接口(socket)d目录(director y)西安理工大学计算机科学与工程学院命令篇——权限管理文件访问权限一个文件一经创建,就具有三种访问方式 字符含义八进制表示rread:读,可以显示该文件的内容22=4wwrite:写,可以编辑或删除它 21=2xexcute:执行,如果是程序的话20=1-rwxrw-r-xugo类型一 个文件由1个类型和9个权限位来描述,9个权限位分为3组,每组3个权限位,具体表示如下所示:u:user,文件的属主g:grou p,文件的属主所在的组,属组o:other,其他的用户a:all,以上三种人西安理工大学计算机科学与工程学院命令篇—— 权限管理改变文件/目录的权限(changemode)chmod[u/g/o/a][+/-/=][权限]File Name/DirecName其中:+:增加指定的权限-:去掉指定的权限=:清除所选 的权限并将其设置为制定的权限chmod允许使用八进制符号作为模式,改变权限。chmodPermissionCod eFileName/DirecName其中,PermissionCode按如下方式计算-rwxrw -r-x4+2+1=74+2=64+1=5所以该文件/目录具有的权限为:765西安理工大学计算机科学与工程学 院命令篇——权限管理命令结果含义chmoda-xhaison.crw-rw-rw-收回所有用户的执行权限chm odgo-whaison.crw-r--r--收回同组用户和其他用户的写权限chmodg+whaison.cr w-rw-r--赋予同组用户写权限chmoda=haison.c---------清除文件的所 有权限chmod命令示例假定haison.c最初具有这样的权限rwxrwxrwx,连续操作如下命令结果含义chmod 666haison.crw-rw-rw-赋予所有用户读和写的权限chmod644haison.crw-r--r- -赋予属主读、写权限,其他用户读权限chmod700haison.crwx------赋予属主读、写和 执行权限chmod660haison.crw-rw----赋予属主、属组读和写的权限西安理工大学计算机科学与 工程学院命令篇——权限管理-rw-r--r--1haisonhaison18Nov210:10hai son.c改变文件/目录的属主(changeowner)chownOwnerFileName/DirecNam e如:chownDavehaison.c改变文件/目录的属组(changegroup)chgrpG roupFileName/DirecName如:chgrpDavehaison.c改变文件/目录的属主和属组 chownowner:groupFileName/DirecName如:chownDave:Dave haison.c西安理工大学计算机科学与工程学院变量篇变量可以定制用户本身的工作环境,使用变量可以保存有用信息,使系统 获知用户相关设置,也用于保存暂时信息。变量一般都用大写字母表示使用echo命令可以显示单个变量的取值,要在变量名前面加$ 如:USER=“haison”echo$USER如果设置变量时,不想再改变其值,可以 将其设置为只读,只要在变量名前加readonly使用set命令可以显示所有本地定义的shell变量使用unset变量名可以清 除对变量的定义西安理工大学计算机科学与工程学院变量篇本地变量:用户自定义的变量。环境变量:用于所有用户变量,用于用户 进程前,必须用export命令导出。位置变量:$0(脚本名),$1-$9:脚本参数。特定变量:脚本运行时的一些相关信息。 $#传递到脚本的参数个数$传递到脚本的参数,与位置变量不同,此选项参数可超过9个$$脚本运行时当前进程的ID号,常用 作临时变量的后缀,如haison.$$$!后台运行的(&)最后一个进程的ID号$@与$#相同,使用时加引号,并在引号中返回 参数个数$-上一个命令的最后一个参数$?最后命令的退出状态,0表示没有错误,其他任何值表明有错误西安理工大学计算机科 学与工程学院变量篇示例:#!/bin/sh#VarTest.sh#TotestthevariablesUSER= haisonecho"Hello,$USER,theoutputofthisscriptareasfollows :"echo"Thescriptnameis:`ba sename$0`"echo"Thefirstparamofthescriptis :$1"echo"Thesecondparamofthescriptis:$2"echo "Thetenthparamofthescriptis:$10"echo"Allth eparamsyouinputare:$"echo"Thenumberof theparamsyouinputare:$#"echo"TheprocessIDforthisscrip tis:$$"echo"Theexitstatusofthisscriptis :$?"西安理工大学计算机科学与工程学院条件测试篇文件状态测试-d目录-r可读- f常规文件-w可写-L符号连接-x可执行-s文件长度大于0,非空-u文件有suid位设置示例:[-s haison.c]0表示成功,其他为失败,下同。逻辑操作符-a逻辑与(and),操作符两边均为真, 结果为真,否则为假。-o逻辑或(or),操作符两边一边为真,结果为真,否则为假。!逻辑否,条件为假, 结果为真,反之。示例:[-rhaison.c–a–whai.c]西安理工大学计算机科学与工程学院 条件测试篇字符串测试=两个字符串相等-z空串!=两个字符串不相等-n非空串示例:[-z$SHELL ]数值测试-eq数值相等(equalto)-lt第一个数小于第二个数(lessthan)-ne数值不相等(n otequalto)-le第一个数小于等于第二个数-gt第一个数大于第二个数(greaterthan)-ge第一 个数大于等于第二个数示例:[“10”-eq“12”]西安理工大学计算机科学与工程学院控制结构篇选择结构 循环结构if语句:ifthenelse提供条件测试case语句:允许匹配模式、单词或值for:每次依次处理列 表内的信息,直至循环耗尽。until:不常用。条件在循环末尾,至少执行一次。while:条件在循环头部。西安理工大学计算机科学与工程学院控制结构篇——if语句格式1if[条件]then命令fi格式2if[条件];then命令fi或格式3if[条件]then命令1else命令2fi格式4if[条件1]then命令1elif[条件2]then命令2else命令3fi示例#!/bin/sh#ifTest#toshowthemethodofifecho-e"Enterthefirstinteger:\c"readFIRSTecho-n"Enterthesecondinteger:"readSECONDif["$FIRST"-gt"$SECOND"]thenecho"$FIRSTisgreaterthan$SECOND"elif["$FIRST"-gt"$SECOND"]thenecho"$FIRSTislessthan$SECOND"elseecho"$FIRSTisequalto$SECOND"fi西安理工大学计算机科学与工程学院西安理工大学计算机科学与工程学院 |
|
|
|
|
|
|
|
|
|
|