上一篇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 674centos 5.10 下安装oracle 11g_r2 ... -
linux 虚拟机复制后网络无法重启device eth does not seem to be present
2014-07-06 00:28 761vmlite虚拟机启动出错,就把这个虚拟机删除掉重新建立,系 ... -
远程启图像界面登录linux
2014-07-04 15:14 830首先的配置本地yum/etc/yum.conf[Serve ... -
oracle11g redhat6
2014-07-04 15:13 2054red hat enterprise 6安装 挂载光驱 ... -
oracle11g安装Centos
2014-07-04 15:10 758linux64位系统设置/etc/hosts文件 fo ... -
linux 本地源创建redhat enterprise 6
2014-07-04 03:06 827如何解决 yum安装出现This system is no ... -
linux rpm 依赖性安装
2013-07-03 18:51 668yum --disablerepo=\* --enabler ... -
linux umask介绍
2013-03-28 12:49 617umask为权限掩码 一般和chmod配套使用 设置文件的 ... -
linux服务启动优化配置
2012-06-05 14:26 1538本机服务参考: chkconfig --level 2345 ... -
myeclipse 下载地址
2012-06-05 12:02 518下面是MyEclipse 8.5官方下载地址: 请在IE下 ... -
bash1
2012-04-22 02:38 585Bourne again shell (bash) 基 ... -
bash3
2012-04-22 02:38 710探讨 ebuild 系统 Daniel R ... -
bash2
2012-04-22 02:38 576在前一篇 bash 的介绍性 ... -
crontab
2012-04-22 02:39 857crontab命令的功能是在一定的时间间隔调度一些命令的执行。 ... -
shell8
2012-04-25 22:38 644Linux shell脚本前面的实例是说明十进制和二进制的转换 ... -
shell7
2012-04-25 22:38 677Linux shell脚本基础学习这部分如果只看前面间的理论部 ... -
shell5
2012-04-25 22:39 678Linux shell脚本基础已经被分成好几个部分了,这里对控 ... -
shell3
2012-03-20 17:29 541Linux shell脚本基础学习 ... -
shell2
2012-03-20 17:28 585Linux shell脚本基础课程前面一讲介绍的都是语法基础的 ... -
shell1
2012-03-20 17:27 613Linux 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.快速原型设计...
Bourne Shell 及 shell 编程 Bourne Shell 是一个 Unix shell,开发于 Bell 实验室,由 Stephen Bourne 设计。Bourne Shell 是一个功能强大且灵活的 shell,它提供了许多有用的特性和功能,例如变量、条件测试、...
Shell是Unix和Linux操作系统中的命令解释器,它提供了一个用户与操作系统内核交互的界面,允许用户通过输入命令来执行系统功能。Shell不仅是一个命令行接口,还是一个强大的编程语言,用户可以编写脚本来自动化一...
资源名称:Linux Shell脚本学习基础视频资源目录:【】11a00d99b60c4e2eba3440b8aa3a6bdd【】linux_shell脚本编程_01认识shell,如何编写shell脚本和执行【】linux_shell脚本编程_02vivim简单的常用操作【】linux_...
本手册涵盖了 Shell 编程的基础知识,包括 Shell 概述、Shell 解析器、Shell 脚本入门、Shell 中的变量等。 Shell 概述 Shell 是一种命令行接口,允许用户与操作系统进行交互。学习 Shell 编程可以让开发者更好地...
Shell脚本是一种强大的编程工具,它在Unix和Linux操作系统中广泛应用于自动化和任务调度。在Shell脚本中,创建子Shell是一种常见的操作,它可以提供一个隔离的执行环境,使得在其中执行的命令和脚本不会影响到父...
Windows Shell 编程.pdf 看过一些对windows 外壳的扩展程序,在使用上一般都是直接利用windows的外壳API做一些工作,因为外壳操作需要一些比较专业的知识,因此,大部分编程人员特别是使用集成编程环境的程序人员对...
4. **启动计算机**:保存设置并退出,电脑将尝试从U盘启动,并执行shell.efi。一旦shell启动,你就可以输入各种命令来管理硬件、加载操作系统映像或者进行故障排除。 UEFI shell提供了一系列内置命令,例如`fs0:`...
提问: 我想要知道运行中脚本子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. **函数**:如何定义和调用自定义函数,以实现代码复用。 5. **输入/输出重定向**:如何改变命令的标准输入、输出和错误输出,实现文件操作和数据流的控制。 6. **管道和重定向**:利用管道(|)连接命令,实现...
### Visual Studio 2013 Shell 知识点解析 #### 一、Visual Studio Shell 概述 在软件开发领域,Visual Studio Shell 是一个极为重要的工具。它由微软推出,旨在为开发者提供一个灵活且可扩展的基础平台。通过这个...
4. **内置变量**:C Shell预定义了一些变量,用于控制shell的行为。 C Shell环境的自定义主要通过三个文件完成: - **.cshrc**:这是C Shell启动时读取的第一个文件,用于设置命令别名、定义变量等,每次启动C ...
4. 赋予脚本执行权限,例如 chmod +x helloworld.sh 执行 Shell 脚本有两种方法: 1. 使用 bash 或 sh 命令,例如 bash helloworld.sh 或 sh helloworld.sh 2. 直接执行脚本,例如 ./helloworld.sh 或 /home/lxx/...