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

系统 Linux
Linux shell脚本基础第四讲我们接着学习Linux shell脚本中的控制流程内容,这里主要介绍控制流程的loop和引号这两部分内容。

上一篇Linux shell脚本基础学习中我们讲了Linux shell脚本中控制流程的if 、select、case ,这里接着介绍Linux shell脚本控制流程的loop和引号,控制流程这部分内容比较多,还有一部分内容是关于here document的。

4.loop

loop表达式:

while ...; do

....

done

while-loop 将运行直到表达式测试为真。will run while the expression that we test for is true.

关键字"break" 用来跳出循环。而关键字”continue”用来不执行余下的部分而直接跳到下一个循环。

for-loop表达式查看一个字符串列表 (字符串用空格分隔) 然后将其赋给一个变量:

for var in ....; do

....

done

在下面的例子中,将分别打印ABC到屏幕上:

#!/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

Linux shell脚本基础这里就到这里,控制流程还有一点here document的内容下次再分析。

【编辑推荐】

  1. 详细解析Linux服务器攻击的分级防御
  2. Linux系统安全提高之安全配置
  3. Linux系统安全提高之系统优化
  4. 详述怎么使用Linux救援模式
  5. 详细讲述如何使用Linux ntfs分区

 

责任编辑:小霞 来源: 互联网
相关推荐

2010-03-05 13:00:46

2010-03-05 13:09:23

Linux shell

2010-03-05 13:19:23

2010-03-05 11:18:52

Linux shell

2010-03-05 12:50:38

Linux shell

2010-03-05 10:50:17

2010-03-05 10:24:33

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

2010-02-23 10:32:20

Python 脚本

2011-07-13 15:47:58

C

2011-06-22 12:57:54

JVM

2016-11-15 15:50:22

linux基础命令vim

2021-02-15 17:29:46

LinuxShell脚本

2010-01-05 16:56:28

2010-06-23 15:36:23

Linux Bug B

2009-12-11 15:59:00

Linux grep指
点赞
收藏

51CTO技术栈公众号