龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 操作系统 > LINUX系统 >

Linux Shell脚本编写基础(2)

时间:2011-03-20 22:37来源:未知 作者:admin 点击:
分享到:
5. 引号 在向程序传递任何参数之前,程序会扩展通配符和变量。这里所谓扩展的意思是程序会把通配符(比如*)替换成合适的文件名,它变量替换成变量值。为了防止程序作这种替换

  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" 以 << 开头,后面接上一个字符串,这个字符串还必须出现在here document的末尾。下面是一个例子,在该例子中,我们对多个文件进行重命名,并且使用here documents打印帮助:

  #!/bin/sh

  # we have less than 3 arguments. Print the help text:

  if [ $# -lt 3 ] ; then

  cat <

  ren -- renames a number of files using sed regular expressions

  USAGE: ren 'regexp' 'replacement' files...

  EXAMPLE: rename all *.HTM files in *.html:

  ren 'HTM$' 'html' *.HTM

  HELP

  exit 0

  fi

  OLD="$1"

  NEW="$2"

  # The shift command removes one argument from the list of

  # command line arguments.

  shift

  shift

  # $* contains now all the files:

  for file in $*; do

  if [ -f "$file" ] ; then

  newfile=`echo "$file" | sed "s/${OLD}/${NEW}/g"`

  if [ -f "$newfile" ]; then

  echo "ERROR: $newfile exists already"

  else

  echo "renaming $file to $newfile ..."

  mv "$file" "$newfile"

  fi

  fi

  done

  这是一个复杂一些的例子。让我们详细讨论一下。第一个if表达式判断输入命令行参数是否小于3个 (特殊变量$# 表示包含参数的个数) 。如果输入参数小于3个,则将帮助文字传递给cat命令,然后由cat命令将其打印在屏幕上。打印帮助文字后程序退出。如果输入参数等于或大于3个,我们就将第一个参数赋值给变量OLD,第二个参数赋值给变量NEW。下一步,我们使用shift命令将第一个和第二个参数从参数列表中删除,这样原来的第三个参数就成为参数列表$*的第一个参数。然后我们开始循环,命令行参数列表被一个接一个地被赋值给变量$file。接着我们判断该文件是否存在,如果存在则通过sed命令搜索和替换来产生新的文件名。然后将反短斜线内命令结果赋值给newfile。这样我们就达到了我们的目的:得到了旧文件名和新文件名。然后使用mv命令进行重命名。

[1] [2] [3] [4] 下一页

收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!
按钮 内容不能为空!
立刻说两句吧! 查看0条评论
精彩图集

赞助商链接