上一篇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的内容下次再分析。
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的内容下次再分析。
发表评论
-
linux oracle 11g install
2015-08-13 13:47 663centos 5.10 下安装oracle 11g_r2 ... -
linux 虚拟机复制后网络无法重启device eth does not seem to be present
2014-07-06 00:28 748vmlite虚拟机启动出错,就把这个虚拟机删除掉重新建立,系 ... -
远程启图像界面登录linux
2014-07-04 15:14 822首先的配置本地yum/etc/yum.conf[Serve ... -
oracle11g redhat6
2014-07-04 15:13 2023red hat enterprise 6安装 挂载光驱 ... -
oracle11g安装Centos
2014-07-04 15:10 742linux64位系统设置/etc/hosts文件 fo ... -
linux 本地源创建redhat enterprise 6
2014-07-04 03:06 815如何解决 yum安装出现This system is no ... -
linux rpm 依赖性安装
2013-07-03 18:51 653yum --disablerepo=\* --enabler ... -
linux umask介绍
2013-03-28 12:49 607umask为权限掩码 一般和chmod配套使用 设置文件的 ... -
linux服务启动优化配置
2012-06-05 14:26 1527本机服务参考: chkconfig --level 2345 ... -
myeclipse 下载地址
2012-06-05 12:02 500下面是MyEclipse 8.5官方下载地址: 请在IE下 ... -
bash1
2012-04-22 02:38 574Bourne again shell (bash) 基 ... -
bash3
2012-04-22 02:38 695探讨 ebuild 系统 Daniel R ... -
bash2
2012-04-22 02:38 564在前一篇 bash 的介绍性 ... -
crontab
2012-04-22 02:39 844crontab命令的功能是在一定的时间间隔调度一些命令的执行。 ... -
shell8
2012-04-25 22:38 635Linux shell脚本前面的实例是说明十进制和二进制的转换 ... -
shell7
2012-04-25 22:38 663Linux shell脚本基础学习这部分如果只看前面间的理论部 ... -
shell5
2012-04-25 22:39 667Linux shell脚本基础已经被分成好几个部分了,这里对控 ... -
shell3
2012-03-20 17:29 528Linux shell脚本基础学习 ... -
shell2
2012-03-20 17:28 570Linux shell脚本基础课程前面一讲介绍的都是语法基础的 ... -
shell1
2012-03-20 17:27 603Linux shell脚本基础学习 ...
相关推荐
linux控制台工具,上传下载等操作都非常简单,用着不错
3. **使用第三方库**:有一些开源库,如`shell4android`或`BusyBox`,它们提供了更方便的API来执行shell命令,无需直接调用系统API。 4. **Android Terminal Emulator**:对于普通用户,可以在设备上安装终端模拟器...
4. shell编程语言:B shell的shell编程语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构,而C shell的shell编程语言较为简单。 5. 可移植性:B shell可以在所有的UNIX系统上运行,...
MSN的插件软件,有隐身、加密、群组、动画功能
4.错误检查:Java Shell提供了实时的错误检查功能,开发者可以实时地检查代码中的错误。 5.多语言支持:Java Shell支持多种语言,包括Java、Groovy、Python、Ruby等。 Java Shell的使用场景包括: 1.快速原型设计...
Shell是Unix和Linux操作系统中的命令解释器,它提供了一个用户与操作系统内核交互的界面,允许用户通过输入命令来执行系统功能。Shell不仅是一个命令行接口,还是一个强大的编程语言,用户可以编写脚本来自动化一...
资源名称:Linux Shell脚本学习基础视频资源目录:【】11a00d99b60c4e2eba3440b8aa3a6bdd【】linux_shell脚本编程_01认识shell,如何编写shell脚本和执行【】linux_shell脚本编程_02vivim简单的常用操作【】linux_...
本手册涵盖了 Shell 编程的基础知识,包括 Shell 概述、Shell 解析器、Shell 脚本入门、Shell 中的变量等。 Shell 概述 Shell 是一种命令行接口,允许用户与操作系统进行交互。学习 Shell 编程可以让开发者更好地...
4. **Shell Here Document** `3.6Shell Here Document(内嵌文档_立即文档).html`将解释Here Document的概念,这是一种方便的输入重定向方式,允许在脚本中直接插入多行文本,常用于创建配置文件或模拟用户输入。 ...
Shell脚本是一种强大的编程工具,它在Unix和Linux操作系统中广泛应用于自动化和任务调度。在Shell脚本中,创建子Shell是一种常见的操作,它可以提供一个隔离的执行环境,使得在其中执行的命令和脚本不会影响到父...
Windows Shell 编程.pdf 看过一些对windows 外壳的扩展程序,在使用上一般都是直接利用windows的外壳API做一些工作,因为外壳操作需要一些比较专业的知识,因此,大部分编程人员特别是使用集成编程环境的程序人员对...
4. **管道与重定向**:利用管道(|)将一个命令的输出作为另一个命令的输入,重定向(>、<、>>)则可以改变命令的标准输入和输出。 5. **Shell内置命令**:如`cd`改变目录,`echo`打印输出,`export`设置环境变量等...
提问: 我想要知道运行中脚本子shell的进程id。我该如何在shell脚本中得到PID。 当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为...
4. 在不中断前台操作的情况下,可通过后台方式运行其它命令。 5. 可以把系统命令、Shell 命令进行适当的组合,构成一个新命令。 6. 可以执行多种命令,包括 Shell 内部命令,Unix 系统命令,编译好的可执行文件甚至 ...
此外,Shell并非固定不变的,用户可以根据个人需求选择不同的Shell类型,常见的Shell包括Bourne Shell (`sh`)、Bourne-Again Shell (`bash`)、C Shell (`csh`)、T C Shell (`tcsh`) 和 Korn Shell (`ksh`)等。...
4. **启动计算机**:保存设置并退出,电脑将尝试从U盘启动,并执行shell.efi。一旦shell启动,你就可以输入各种命令来管理硬件、加载操作系统映像或者进行故障排除。 UEFI shell提供了一系列内置命令,例如`fs0:`...
4. **函数**:如何定义和调用自定义函数,以实现代码复用。 5. **输入/输出重定向**:如何改变命令的标准输入、输出和错误输出,实现文件操作和数据流的控制。 6. **管道和重定向**:利用管道(|)连接命令,实现...