LINUX中的SHELL编程浅析--学年论文.doc_第1页
LINUX中的SHELL编程浅析--学年论文.doc_第2页
LINUX中的SHELL编程浅析--学年论文.doc_第3页
LINUX中的SHELL编程浅析--学年论文.doc_第4页
LINUX中的SHELL编程浅析--学年论文.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

LINUX中的SHELL编程浅析 浅析shell编程 内 容 提 要Shell脚本最常用于系统管理工作,或是用于结合现有的程序以完成小型的特定的工作。Shell程序有很多类似C语言和其他程序设计语言的特征,但是又没有程序语言那样复杂。它结合了延展性与效率,持续保有独具的特色,并不断被改良,是那些类似与GUI等的屏幕图形界面最有力的支柱。Shell程序是指放在一个文件中的一系列Linux命令和实用程序。在执行的时候,通过Linux操作系统一个接一个地解释和执行每条命令。此后,只要直接执行该程序便能完成工作。如果你的程序写的很有用,其他人可以利用该程序当做一个黑盒来使用。本论文将对shell做一个比较全面的解析,使大家能够对之更加熟悉。本论文结构:一:初识shell。1 shell的本质2 什么是Shell?3 shell标准有哪些?4 shell程序大体内容5 运行shell的脚本格式6 编写、修改权限、执行过程二:shell编程浅释 1.shell函数浅介。2. 函数的运用,二进制转化为十进制例题。三:创建菜单式的综合例子介绍。四:总结关键词:shell Linux 解析 LINUX中的SHELL编程浅析 浅析shell编程1、 初识shell。 返回 在写这篇论文之前,我们需要弄清楚5个基本的概念: 1)什么是Shell? 官方的解释称:Shell是一种具备特殊功能的程序, 它是介于使用者和 UNIX/Linux 操作系统之核心程序(kernel)间的一个接口,是核心程序(kernel)之外的指令解析器,是一个程序,同时是一种命令语言和程序设计语言。也就是说, 为了对用户屏蔽内核的复杂性,也为了保护内核以免用户误操作造成损害,在内核的周围建了一个外壳(shell)。用户向shell提出请求,shell解释并将请求传给内核。 2)shell的本质 本质上,shell脚本是命令行命令简单的组合到一个文件里面。Shell基本上是一个命令解释器,类似于DOS下的。它接收用户命令,然后调用相应的应用程序。输入echo $SHELL可以知道当前运行在那个Shell标准中。 3)shell标准有哪些? 使用较广的shell有标准的Bourneshell(sh)、Korn Shell(ksh)、Cshell(csh)、Bourne Again Shell(bash)等。 4)shell程序大体内容shell自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。任何在提示符中能键入的命令都能放到一个可执行的shell程序中。 5)运行shell的脚本格式运行一个SHELL脚本必须为(./+名字.sh)。 5个基本概念明白之后,我们首先来编写第一个Shell程序,从中学习Shell程序的编写、修改权限、执行过程。 利用vi编辑器编辑脚本,将脚本命名为date.sh (Shell脚本不是复杂的程序,它是按行解释的。) 编辑一个内容如下的源程序,保存文件名为date,可将其存放在目录/bin下。rootlocalhost bin#vi date#! /bin/shecho “Mr.$USER,Today is:”echo &date “+%B%d%A”echo “Wish you a lucky day !”注意:#! /bin/sh通知采用Bash解释。如果在echo语句中执行Shell命令date,则需要在date命令前加符号“&”,其中%B%d%A为输入格式控制符。 编辑完该文件之后不能立即执行该文件,需给文件设置可执行程序权限。使用如下命令。rootlocalhost bin#chmod +x date执行Shell程序有下面三种方法:方法一:rootlocalhost bin#./ dateMr.root,Today is:二月 06 星期二Wish you a lucky day !方法二:另一种执行date的方法就是把它作为一个参数传递给Shell命令:rootlocalhost bin# Bash dateMr.root,Today is:二月 06 星期二Wish you a lucky day !方法三: 为了在任何目录都可以编译和执行Shell所编写的程序,即把/bin的这个目录添加到整个环境变量中。具体操作如下:rootlocalhost root#export PATH=/bin:$PATHrootlocalhost bin# dateMr.root,Today is:二月 06 星期二Wish you a lucky day !运行脚本通常在linux工具集上(终端)。类似windows下是dos命令提示符。 以上这些概念可以说是使我们对shell有了一个初步的了解,用过linux的开发人员应该很熟悉,应为linux可以这么说,无论干什么都需要大大小小的命令来支持,那么我们平常的Windows XP用户其实可以参照DOS命令提示符来理解。在DOS命令提示符中输入的命令就可以对你本机做出一些设置。但是编程是要使用大量的命令,关键字,以及语句,所以需要大家自己不断的去熟悉那些命令。接下来我们通过一些例子将shell编程进一步阐释。2 Shell 编程浅释 返回1. Shell脚本中函数的使用:这是一个为下面的程序做铺垫的小例子,关于函数。我们知道函数在各类语言中都是很重要的,它可以使语言模块化,更加清晰,明了。编写一函数add求两个数的和,这两个数用位置参数传入,最后输出结果。(1)编辑代码rootlocalhost bin#gedit test18#!/bin/shadd()a=$1b=$2z=expr $a + $becho “The sum is $z”add $1 $2(2)设置权限rootlocalhost bin#chmod +x test18 (3)执行rootlocalhost bin#./ test18 10 20 The sum is 30注意:函数定义完成后必须同时写出函数的调用,然后对此文件进行权限设定,在执行此文件。2.有了上述前提,我们通过一个关于二-十进制转化的例子加以深化。 任何优秀的脚本都应该具有帮助和输入参数。并且写一个伪脚本(framework.sh),该脚本包含了大多数脚本都需要的框架结构,是一个非常不错的主意。这时候,在写一个新的脚本时我们只需要执行一下 copy命令: cp framework.sh myscript 然后再插入自己的函数。 让我们看下面的例子: 二进制到十进制的转换 脚本 b2d 将二进制数 (比如 1101) 转换为相应的十进制数。这也是一个用expr 命令进行数学运算的例子: #!/bin/sh # vim: set sw=4 ts=4 et: help() cat b2h - convert binary to decimal #输出内容到标准输出设备(屏幕)上USAGE: b2h -h binarynum OPTIONS: -h help text EXAMPLE: b2h 111010 will return 58 HELP exit 0 error() #错误处理 # print an error and exit echo $1 exit 1 lastchar() #得到单个的二进制数我们是用了 lastchar 函数。该函数使用wc c计算#字符个数,然后使用 cut命令取出末尾一个字符。 # return the last character of a string in $rval #返回变量中最后一个字符 if -z $1 ; then (if中通常用 来表示条件测试。注意这里的空格很重要。要确保方括号的空格。 -f somefile :判断是否是一个文件 -x /bin/ls :判断/bin/ls是否存在并有可执行权限 -n $var :判断$var变量是否有值 $a = $b :判断$a和$b是否相等 -z STRING :“STRING” 的长度为零则为真 # empty string rval= return fi # wc puts some space behind the output this is why we need sed: numofchar=echo -n $1 | wc -c | sed s/ /g #运用管道,wc -c计算出的字符数作为下一#个命令的输入值 # now cut out the last char rval=echo -n $1 | cut -b $numofchar chop() #Chop函数的功能则是移除最后一个字符。 # remove the last character in string and return it in $rval if -z $1 ; then # empty string rval= return fi # wc puts some space behind the output this is why we need sed: numofchar=echo -n $1 | wc -c | sed s/ /g ( Sed是一个基本的查找替换程序。可以从标准输入(比如命令管道)读入文本,并将结果输出到标准输出(屏幕)。该命令采用正则表达式(见参考)进行搜索。不要和shell中的通配符相混淆。) if $numofchar = 1 ; then # only one char in string rval= return fi numofcharminus1=expr $numofchar - 1 # now cut all but the last char: rval=echo -n $1 | cut -b 0-$numofcharminus1 (cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆,这是两个完全不同的命令) while -n $1 ; do case $1 in (case :表达式可以用来匹配一个给定的字符串,而不是数字。) -h) help;shift 1; # function help is called -) shift;break; # end of options -*) error error: no such option $1. -h for help; *) break; esac done # The main program sum=0 weight=1 # one arg must be given: -z $1 & help binnum=$1 binnumorig=$1 while -n $binnum ; do lastchar $binnum if $rval = 1 ; then sum=expr $weight + $sum fi # remove the last position in $binnum chop $binnum binnum=$rval weight=expr $weight * 2 done echo binary $binnumorig is decimal $sum 该脚本使用的算法是利用十进制和二进制数权值 (1,2,4,8,16,.),比如二进制10可以这样转换成十进制: 0 * 1 + 1 * 2 = 2 为了得到单个的二进制数我们是用了 lastchar 函数。该函数使用wc c计算字符个数,然后使用 cut命令取出末尾一个字符。Chop函数的功能则是移除最后一个字符。 调试 最简单的调试命令当然是使用 echo命令。您可以使用 echo在任何怀疑出错的地方打印任何变量值。这也是绝大多数的shell程序员要花费 80%的时间来调试程序的原因。Shell程序的好处在于不需要重新编译,插入一个echo命令也不需要多少时间。 shell也有一个真实的调试模式。如果在脚本strangescript 中有错误,您可以这样来进行调试: sh -x strangescript 这将执行该脚本并显示所有变量的值。 shell还有一个不需要执行脚本只是检查语法的模式。可以这样使用: sh -n your_script 这将返回所有语法错误。 三 大练习 返回 通过上述概念和例题的分析,我们对shell编程有了一定的了解,下面我们通过一个综合例子来将这些知识点进行贯穿。综合实例编写一个Shell程序,呈现一个菜单,有0-5共6个命令选项,1为挂载U盘,2为卸载U盘,3为显示U盘的信息,4把硬盘中的文件拷贝到U盘,5把U盘中的文件拷贝到硬盘中,选0为退出。程序分析:把此程序分成题目中要求的6大功能模块,另外加一个菜单显示及选择的主模板。(1) 编辑代码 rootlocalhost bin#vi test19#!/bin/sh#mountusb.sh#退出程序函数quit() clear echo “*” echo “* thank you to use,Good bye! *” exit 0 #加载U盘函数 mountusb() clear #在/mnt下创建usb目录 mkdir /mnt/usb #查看U盘设备名称 /sbin/fdisk l |grep /dev/sd echo e “Please Enter the device name of usb as shown above:c”read PARAMETERmount /dev/$PARAMETER /mnt/usb#卸载U盘函数umountusb() clear ls -la /mnt/usb#显示U盘信息函数display() clear umount /mnt/usb#拷贝硬盘文件到U盘函数cpdisktousb() clear echo e “Please Enter the filename to be Copide (under Current directory):c” read FILE echo “Copying,please wait!.” cp $FILE /mnt/usb#拷贝U盘函数到硬盘文件cpusbtodisk() clear echo -e “Please Enter the filename to be Copide in USB:c” read FILE echo “Copying ,Please wait!.” cp /mnt/usb/$FILE . #点(.)表示当前路径 clear while true doecho “=”echo “* LINUX USB MANAGE PROGRAM *”echo “ 1-MOUNT USB ”echo “ 2-UNMOUNT USB

温馨提示

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

评论

0/150

提交评论