文档章节

【Linux 系统编程】shell 流程控制Loop和引号(三)

徐昊
 徐昊
发布于 2016/11/03 12:18
字数 1211
阅读 4
收藏 0

前言

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

原文链接请标明:
http://blog.csdn.net/u011974987/article/details/52709642
本文出自:【stromxu的博客】


正文

继上篇之后

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、引号

在想程序传递任何参数之前,程序会扩展通配符和变量。这里所谓的扩展的意思是程序会把通配符(比如*)替换成合适的文件名,它变量替换成变量值。为了防止程序做这种替换,您可以使用引号。

下面是shell引用类型:

  • “” 双引号
  • ” 单引号
  • ` 反引号
  • \ 反斜线
5.1、双引号

使用双引号,可引用除了字符$、`、\外的任意字符或字符串。
例如:

#!/bin/bash
STR="My name is xuhao"
echo "$STR"

输出:

My name is xuhao

也可以去掉双引号:

echo $STR

执行脚本输出的结果还是一样的。

双引号可以使具有特殊含义的词失去其原本的意义,如下:

这里写图片描述

特殊含义的cal,执行的是显示出2016年 12月的日历。

但是我们将cal 命令复制给一个变量,如下:

CAL="cal"
echo $CAL

最后输出cal
这里,双引号使cal 命令失去了原有的显示日历的功能;在这里双引号类似于转义字符。

5.2、单引号

  单引号与双引号类似,不同的是shell 会忽略任何引用值,即屏蔽的单引号内的特殊字符的原本含义。

echo ‘my name is $LOGNAME’
其结果为:
my name is $LOGNAME
5.3、单引号和双引号的区别

单引号‘’:取消除单引号以外的任何字符的特殊含义。
如:

`echo ‘my name is $name`’

其结果为:

my name is $name
此时$只作为一个普通字符使用了。 
双引号“”:取消除双引号、$号以及_号以外的所有字符的特殊含义

单引号是强引用,引号里的值是什么,变量的值就是什么;

双引号是弱引用,引号里的值若再包含变量,那在赋值的时候,所有这些变量就被立即替换了。

5.4、反引号

反引号(`)用于设置系统命令输出到变量,shell认为反引号中的内容是一个系统命令,
所以将会执行之:

echo `date`
Mon Dec 24 16:06:55 CST 2012

这和直接输入date命令是一样的:

date
Mon Dec 24 16:07:12 CST 2012

若输入一个非系统命令,则shell不认识此命令,将会报错:

echo `DATE`
ksh: DATE: not found
5.5、反斜杠

反斜杠起的作用是将一些特殊字符按原样输出,这些特殊字符有:

$、*、`、+、^、&、|、"、?。

例如:echo *
将当前目录下的文件名和目录名都列出来。

echo \*
*

而使用反斜杠转义之后,就输出了星号。


更多相关系列文章传送门:

【CSDN】Linux Shell脚本基础学习系列

【Linux 系统编程】shell 脚本基础学习(一)
【Linux 系统编程】shell 命令和流程控制(二)
【Linux 系统编程】shell 流程控制loop和引号(三)
【Linux 系统编程】shell 输入/输出重定向及HereDocument(四)
【Linux 系统编程】shell 脚本基础学习之函数(五)

本文由博主辛苦整理下来的笔记;
希望大家能够指点或提出宝贵意见,共同学习,谢谢!
转载请注明出处:http://blog.csdn.net/u011974987/article/details/52709642
欢迎关注我的社交网站~
个人博客:xuhaoblog.com
新浪微博:http://weibo.com/xuxiho
GitHub:https://github.com/git-xuhao

© 著作权归作者所有

徐昊

徐昊

粉丝 1
博文 84
码字总数 174446
作品 2
杨浦
Android工程师
私信 提问
Shell脚本编程30分钟入门

什么是Shell脚本 示例 看个例子吧: #!/bin/shcd ~mkdir shell_tutcd shell_tut for ((i=0; i<10; i++)); do done 示例解释 第1行:指定脚本解释器,这里是用/bin/sh做解释器的 第2行:切换到...

quanpower
2014/03/23
4.8K
0
linux shell脚本编程学习总结

0.linux shell脚本编程 对于一些简单的操作,我们可以直接通过在linux 命令行执行就可以了,比如列出文件命令ls -l,但是有时候我们需要完成的任务需要连续执行多条linux命令,而且他们之间具...

i_am_alone
2018/08/11
0
0
shell脚本编程30分钟入门上手

什么是Shell脚本 Shell脚本(英语:Shell script),又称Shell命令稿、程序化脚本,是一种电脑程序与文本文件,内容由一连串的shell命令组成,经由Unix Shell直译其内容后运作。被当成是一种...

湖南小影
2017/05/22
0
0
linux shell编程之变量_01

计算机硬件是由内核(kernel)管理的。我们能通过shell,KDE或者应用程序和内核通信,好让内核可以控制硬件来完成我们的工作。能够操作应用程序的接口都可以成为shell。shell是linux的任督二...

长平狐
2012/09/19
160
0
Linux - Shell 变量

变量是暂时存储数据的地方及数据标记,所存储的数据存在于内存空间中,通过正确地调用内存空间中变量的名字就可以取出与变量对应的数据。使用变量最大的好处就是使程序开发更为方便,同时,在...

Mr_ET
2018/10/03
27
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
15
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
15
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部