快捷搜索:  

Linux 脚本编写基础(3)


 #!/bin/sh
 for var in A B C ; do
   echo "var is $var"
 done
 下面是一个更为有用的脚本showrpm,其功能是打印一些RPM包的统计信息:
 #!/bin/sh
 # list a content summary of a number of RPM packages
 # USAGE: showrpm rpmfile1 rpmfile2 ...
 # EXAMPLE: showrpm /cdrom/RedHat/RPMS/*.rpm
 for rpmpackage in $*; do
  if [ -r "$rpmpackage" ];then
   echo "=============== $rpmpackage =============="
   rpm -qi -p $rpmpackage
  else
   echo "ERROR: cannot read file $rpmpackage"
  fi
 done
   这里出现了第二个特殊的变量$*,该变量包含了所有输入的命令行参数值。
 如果您运行showrpm openssh.rpm w3m.rpm webgrep.rpm
 此时 $* 包含了 3 个字符串,即openssh.rpm, w3m.rpm and webgrep.rpm.
 5. 引号
 在向程序传递任何参数之前,程序会扩展通配符和变量。这里所谓扩展的意思是程序会把通配符(比如*)替换成合适的文件名,它变量替换成变量值。为了防止程序作这种替换,您可以使用引号:让我们来看一个例子,假设在当前目录下有一些文件,两个jpg文件, mail.jpg 和tux.jpg。
 1.2 编译SHELL脚本
 #ch#!/bin/sh mod +x filename
  cho *.jpg ∪缓螅梢酝ü淙耄?./filename 来执行您的脚本。
   这将打印出"mail.jpg tux.jpg"的结果。
     引号 (单引号和双引号) 将防止这种通配符扩展:
 #!/bin/sh
 echo "*.jpg"
 echo '*.jpg'
   这将打印"*.jpg" 两次。
   单引号更严格一些。它可以防止任何变量扩展。双引号可以防止通配符扩展但允许变量扩展。
 #!/bin/sh
 echo $SHELL
 echo "$SHELL"
 echo '$SHELL'
   运行结果为:
 /bin/bash
 /bin/bash
 $SHELL
   最后,还有一种防止这种扩展的方法,那就是使用转义字符——反斜杆:
 echo *.jpg
 echo $SHELL
   这将输出:
 *.jpg
 $SHELL
 6. Here documents
 当要将几行文字传递给一个命令时,here documents(译者注:目前还没有见到过对该词适合的翻译)一种不错的方法。对每个脚本写一段帮助性的文字是很有用的,此时如果我们四有那个 here documents就不必用echo函数一行行输出。 一个 "Here document" 以
4)函数
 如果您写了一些稍微复杂一些的程序,您就会发现在程序中可能在几个地方使用了相同的代码,并且您也会发现,如果我们使用了函数,会方便很多。一个函数是这个样子的:
 functionname()
 {
 # inside the body $1 is the first argument given to the function
 # $2 the second ...
 body
 }
 您需要在每个程序的开始对函数进行声明。
   下面是一个叫做xtitlebar的脚本,使用这个脚本您可以改变终端窗口的名称。
 这里使用了一个叫做help的函数。正如您可以看到的那样,这个定义的函数被使用了两次。
 #!/bin/sh
 # vim: set sw=4 ts=4 et:
 help()
 {
   cat  shift by 2
   --) shift;break;; # end of options
   -*) echo "error: no such option $1. -h for help";exit 1;;
   *) break;;
 esac
 done
 echo "opt_f is $opt_f"
 echo "opt_l is $opt_l"
 echo "first arg is $1"
 echo "2nd arg is $2"
   您可以这样运行该脚本:
 cmdparser -l hello -f -- -somefile1 somefile2
   返回的结果是:
 opt_f is 1
 opt_l is hello
 first arg is -somefile1
 2nd arg is somefile2
   这个脚本是如何工作的呢?脚本首先在所有输入命令行参数中进行循环,将输入参数与case表达式进行比较,如果匹配则设置一个变量并且移除该参数。根据unix系统的惯例,首先输入的应该是包含减号的参数.
 第2部分 实例
 现在我们来讨论编写一个脚本的一般步骤。任何优秀的脚本都应该具有帮助和输入参数。并且写一个伪脚本(framework.sh),该脚本包含了大多数脚本都需要的框架结构,是一个非常不错的主意。这时候,在写一个新的脚本时我们只需要执行一下copy命令:
 cp framework.sh myscript
  然后再插入自己的函数。
   让我们再看两个例子:
   二进制到十进制的转换
   脚本 b2d 将二进制数 (比如 1101) 转换为相应的十进制数。这也是一个用expr命令进行数学运算的例子:
 #!/bin/sh
 # vim: set sw=4 ts=4 et:
 help()
 {
  cat

--------------------------------------------------------------------------------------------------
 --------------------------------------------------------------------------------------------------
 shell编程简介
作者: 何斌武 (
 hbwork@dlut.edu.cn
 ,大连理工大学网络中心,April 1999.)

顶(1)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论