ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:23.33KB ,
资源ID:4790451      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-4790451.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(shell编程Word文件下载.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

shell编程Word文件下载.docx

1、;这是由于shell会去搜索变量numnd的值,而实际上这个变量此时并没有值。这时,我们可以用花括号来告诉shell要打印的是num变量:this is the $numnd其输出结果为:this is the 2nd Shell脚本中有许多变量是系统自动设定的,我们将在用到这些变量时再作说明。除了只在脚本内有效的普通shell变量外,还有环境变量,即那些由export关键字处理过的变量。本文不讨论环境变量,因为它们一般只在登录脚本中用到。Shell里的流程控制 if 语句 if表达式如果条件为真,则执行then后的部分:if .; then .elif .;elsefi大多数情况下,可以使用

2、测试命令来对条件进行测试,比如可以比较字符串、判断文件是否存在及是否可读等等通常用 来表示条件测试,注意这里的空格很重要,要确保方括号前后的空格。 -f somefile :判断是否是一个文件 -x /bin/ls判断/bin/ls是否存在并有可执行权限 -n $var判断$var变量是否有值 $a = $b判断$a和$b是否相等 执行man test可以查看所有测试表达式可以比较和判断的类型。下面是一个简单的if语句:if $SHELL = /bin/bash ; echo your login shell is the bash (bourne again shell)your login

3、 shell is not bash but $SHELL变量$SHELL包含有登录shell的名称,我们拿它和/bin/bash进行比较以判断当前使用的shell是否为bash。& 和 | 操作符熟悉C语言的朋友可能会喜欢下面的表达式:/etc/shadow &This computer uses shadow passwords这里的 & 就是一个快捷操作符,如果左边的表达式为真则执行右边的语句,你也可以把它看作逻辑运算里的与操作。上述脚本表示如果/etc/shadow文件存在,则打印”This computer uses shadow passwords”。同样shell编程中还可以用或

4、操作(|),例如:mailfolder=/var/spool/mail/james -r $mailfolder | echo Can not read $mailfolder; exit 1; $mailfolder has mail from:grep From $mailfolder该脚本首先判断mailfolder是否可读,如果可读则打印该文件中的From 一行。如果不可读则或操作生效,打印错误信息后脚本退出。需要注意的是,这里我们必须使用如下两个命令:-打印错误信息 -退出程序 我们使用花括号以匿名函数的形式将两个命令放到一起作为一个命令使用;普通函数稍后再作说明。即使不用与和或操作

5、符,我们也可以用if表达式完成任何事情,但是使用与或操作符会更便利很多 。case 语句case表达式可以用来匹配一个给定的字符串,而不是数字(可别和C语言里的switch.case混淆)。case . in .) do something hereesac让我们看一个例子,file命令可以辨别出一个给定文件的文件类型,如:file lf.gz,其输出结果为:lf.gz: gzip compressed data, deflated, original filename,last modified: Mon Aug 27 23:09:18 2001, os: Unix我们利用这点写了一个名为s

6、martzip的脚本,该脚本可以自动解压bzip2, gzip和zip 类型的压缩文件: #! ftype=file $1 # Note and is different case $ftype in $1: Zip archive*) unzip gzip compressed gunzip bzip2 compressed bunzip2 *) echo File $1 can not be uncompressed with smartzip esac你可能注意到上面使用了一个特殊变量$1,该变量包含有传递给该脚本的第一个参数值。也就是说,当我们运行:smartzip articles.

7、zip$1 就是字符串 articles.zip。select 语句 select表达式是bash的一种扩展应用,擅长于交互式场合。用户可以从一组不同的值中进行选择:select var in . dobreak;done. now $var can be used .下面是一个简单的示例:What is your favourite OS?select var in LinuxGnu HurdFree BSDOtherbreak;You have selected $var1. 如果 以上脚本运行出现 select :NOT FOUND 将 #!/bin/sh 改为 #!/bin/bash

8、找了半天才找到的答案 该脚本的运行结果如下:1) Linux2) Gnu Hurd3) Free BSD4) Other#? 1You have selected Linuxwhile/for 循环在shell中,可以使用如下循环:while .;只要测试表达式条件为真,则while循环将一直运行。关键字break用来跳出循环,而关键字”continue”则可以跳过一个循环的余下部分,直接跳到下一次循环中。for循环会查看一个字符串行表(字符串用空格分隔),并将其赋给一个变量:for var in .;下面的示例会把A B C分别打印到屏幕上:for var in A B Cvar is $v

9、ar下面是一个实用的脚本showrpm,其功能是打印一些RPM包的统计信息:# list a content summary of a number of RPM packages# USAGE: showrpm rpmfile1 rpmfile2 .# EXAMPLE: showrpm /cdrom/RedHat/RPMS/*.rpmfor rpmpackage in $*; if -r $rpmpackagethen= $rpmpackage = rpm -qi -p $rpmpackage elseERROR: cannot read file $rpmpackage fi这里出现了第二

10、个特殊变量$*,该变量包含有输入的所有命令行参数值。如果你运行showrpm openssh.rpm w3m.rpm webgrep.rpm,那么 $* 就包含有 3 个字符串,即openssh.rpm, w3m.rpm和 webgrep.rpm。Shell里的一些特殊符号引号 在向程序传递任何参数之前,程序会扩展通配符和变量。这里所谓的扩展是指程序会把通配符(比如*)替换成适当的文件名,把变量替换成变量值。我们可以使用引号来防止这种扩展,先来看一个例子,假设在当前目录下有两个jpg文件:mail.jpg和tux.jpg。echo *.jpg运行结果为:mail.jpg tux.jpg引号(单

11、引号和双引号)可以防止通配符*的扩展:*.jpgecho *.jpg其运行结果为:*.jpg其中单引号更严格一些,它可以防止任何变量扩展;而双引号可以防止通配符扩展但允许变量扩展:echo $SHELL$SHELL$SHELL/bin/bash$SHELL此外还有一种防止这种扩展的方法,即使用转义字符反斜杆::echo *.jpgecho $SHELL输出结果为:Here Document 当要将几行文字传递给一个命令时,用here documents是一种不错的方法。对每个脚本写一段帮助性的文字是很有用的,此时如果使用here documents就不必用echo函数一行行输出。Here do

12、cument以 开头,后面接上一个字符串,这个字符串还必须出现在here document的末尾。下面是一个例子,在该例子中,我们对多个文件进行重命名,并且使用here documents打印帮助:# we have less than 3 arguments. Print the help text:if $# -lt 3 cat HELPren - renames a number of files using sed regular expressions USAGE: ren regexp replacement files.EXAMPLE: rename all *.HTM file

13、s in *.html:HTM$html *.HTMHELP exit 0OLD=NEW=$2# The shift command removes one argument from the list of# command line arguments.shift# $* contains now all the files:for file in $*; if -f $file newfile=echo | sed s/$OLD/$NEW/g$newfile echo $newfile exists alreadyrenaming $file to $newfile . mv 这个示例有

14、点复杂,我们需要多花点时间来说明一番。第一个if表达式判断输入命令行参数是否小于3个 (特殊变量$# 表示包含参数的个数) 。如果输入参数小于3个,则将帮助文字传递给cat命令,然后由cat命令将其打印在屏幕上。打印帮助文字后程序退出。如果输入参数等于或大于3个,我们就将第一个参数赋值给变量OLD,第二个参数赋值给变量NEW。下一步,我们使用shift命令将第一个和第二个参数从参数列表中删除,这样原来的第三个参数就成为参数列表$*的第一个参数。然后我们开始循环,命令行参数列表被一个接一个地被赋值给变量$file。接着我们判断该文件是否存在,如果存在则通过sed命令搜索和替换来产生新的文件名。然

15、后将反短斜线内命令结果赋值给newfile。这样我们就达到了目的:得到了旧文件名和新文件名。然后使用 mv命令进行重命名 Shell里的函数 如果你写过比较复杂的脚本,就会发现可能在几个地方使用了相同的代码,这时如果用上函数,会方便很多。函数的大致样子如下:functionname()# inside the body $1 is the first argument given to the function# $2 the second .body你需要在每个脚本的开始对函数进行声明。下面是一个名为xtitlebar的脚本,它可以改变终端窗口的名称。这里使用了一个名为help的函数,该函数

16、在脚本中使用了两次:# vim: set sw=4 ts=4 et:help()xtitlebar - change the name of an xterm, gnome-terminal or kde konsoleUSAGE: xtitlebar -h string_for_titelbarOPTIONS: -h help text xtitlebar cvsexit 0# in case of error or if -h is given we call the function help: -z help-h# send the escape sequence to change

17、the xterm titelbar:echo -e 330;$107# 在脚本中提供帮助是一种很好的编程习惯,可以方便其他用户(和自己)使用和理解脚本。命令行参数 我们已经见过$* 和 $1, $2 . $9 等特殊变量,这些特殊变量包含了用户从命令行输入的参数。迄今为止,我们仅仅了解了一些简单的命令行语法(比如一些强制性的参数和查看帮助的-h选项)。但是在编写更复杂的程序时,您可能会发现您需要更多的自定义的选项。通常的惯例是在所有可选的参数之前加一个减号,后面再加上参数值 (比如文件名)。有好多方法可以实现对输入参数的分析,但是下面的使用case表达式的例子无疑是一个不错的方法。 cat

18、shift by 2 -) shift;break; # end of options -*) echo error: no such option $1. -h for helpexit 1; *) break;opt_f is $opt_fopt_l is $opt_lfirst arg is $12nd arg is $2你可以这样运行该脚本:cmdparser -l hello -f - -somefile1 somefile2返回结果如下:opt_f is 1opt_l is hellofirst arg is -somefile12nd arg is somefile2这个脚本是如

19、何工作的呢?脚本首先在所有输入命令行参数中进行循环,将输入参数与case表达式进行比较,如果匹配则设置一个变量并且移除该参数。根据unix系统的惯例,首先输入的应该是包含减号的参数。Shell脚本示例一般编程步骤现在我们来讨论编写一个脚本的一般步骤。任何优秀的脚本都应该具有帮助和输入参数。写一个框架脚本(framework.sh),该脚本包含了大多数脚本需要的框架结构,是一个非常不错的主意。这样一来,当我们开始编写新脚本时,可以先执行如下命令:cp framework.sh myscript然后再插入自己的函数。让我们来看看如下两个示例。二进制到十进制的转换 脚本 b2d 将二进制数 (比如

20、1101) 转换为相应的十进制数。这也是一个用expr命令进行数学运算的例子:b2d - convert binary to decimal b2d -h binarynum b2d 111010will return 58error() # print an error and exit exit 1lastchar() # return the last character of a string in $rval if -z # empty string rval= return # wc puts some space behind the output this is why we

21、need sed: numofchar=echo -n | wc -c | sed s/ /g # now cut out the last char rval=echo -n | cut -b $numofcharchop() # remove the last character in string and return it in $rval if $numofchar1 # only one char in string numofcharminus1=expr $numofchar - 1 # now cut all but the last char: | cut -b -$num

22、ofcharminus1 #原来的 rval=echo -n | cut -b 0-$numofcharminus1运行时出错. #原因是cut从1开始计数,应该是cut -b 1-$numofcharminus1 -*) error # The main programsum=0weight=1# one arg must be given:binnum=binnumorig=$binnum lastchar $rval sum=expr $weight+$sum # remove the last position in $binnum chop binnum= weight=expr * 2binary $binnumorig is decimal $sum#该脚本使用的算法是利用十进制和二进制数权值 (1,2,4,8,16,.),比如二进制10可以这样转

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2