详细介绍Linux shell脚本基础学习(五)

系统 Linux
Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续。

Linux shell脚本基础已经被分成好几个部分了,这里对控制流程的内容也就马上讲完了,这是最后一部分关于here document,这里举例稍微有点复杂,我们慢慢来分析这个复杂Linux 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命令进行重命名。这样就明了这个复杂的Linux shell脚本了吧。

【编辑推荐】

  1. 详细介绍Linux shell脚本基础学习(一)
  2. Linux系统安全提高之安全配置
  3. Linux系统安全提高之系统优化
  4. 闲谈十个linux管理常见错误
  5. 全面剖析Linux系统管理命令w
责任编辑:小霞 来源: 互联网
相关推荐

2010-03-05 10:50:17

2010-03-05 10:24:33

2010-03-05 13:09:23

Linux shell

2010-03-05 13:19:23

2010-03-05 13:00:46

2010-03-05 11:58:52

2010-03-05 11:18:52

Linux shell

2011-09-27 13:52:41

2010-06-23 16:05:36

Linux Bash

2010-06-23 15:55:36

Linux Bash

2019-08-12 07:45:44

Linux脚本shell

2011-06-21 14:42:37

ECMAScriptJavaScript

2016-12-07 18:22:23

shelllinuxgrep

2010-02-23 10:32:20

Python 脚本

2011-06-22 12:57:54

JVM

2021-02-15 17:29:46

LinuxShell脚本

2009-12-18 11:48:24

网络安装 Linux

2010-06-18 17:35:16

Linux Anacr

2010-06-22 09:28:31

Linux at命令

2010-01-05 16:56:28

点赞
收藏

51CTO技术栈公众号