博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Linux 系统编程】shell 流程控制Loop和引号(三)
阅读量:5959 次
发布时间:2019-06-19

本文共 2236 字,大约阅读时间需要 7 分钟。

hot3.png

前言

Linux shell 脚本基础学习第三篇;

Liunx 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/shfor var in A B C ; doecho "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/*.rpmfor rpmpackage in $*; doif [ -r "$rpmpackage" ];thenecho "=============== $rpmpackage =============="rpm -qi -p $rpmpackageelseecho "ERROR: cannot read file $rpmpackage"fidone

这里出现了第二个特殊的变量$*,该变量包含了所有输入的命令行参数值。

如果您运行

showrpm openssh.rpm w3m.rpm webgrep.rpm

此时 $* 包含了 3 个字符串,即openssh.rpm, w3m.rpm and webgrep.rpm


5、引号

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

下面是shell引用类型:

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

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

例如:

#!/bin/bashSTR="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命令是一样的:

dateMon Dec 24 16:07:12 CST 2012

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

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

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

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

例如:echo *

将当前目录下的文件名和目录名都列出来。

echo \**

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


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

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

本文由博主辛苦整理下来的笔记;

希望大家能够指点或提出宝贵意见,共同学习,谢谢!
转载请注明出处:
欢迎关注我的社交网站~
个人博客:
新浪微博:
GitHub:

转载于:https://my.oschina.net/xuhaozi/blog/780403

你可能感兴趣的文章
QQ把游戏放进聊天框,这一点Facebook和微信都没做到
查看>>
在线匿名之父意欲终结“加密战争”
查看>>
WLAN市场销量逐步逼近有线网络
查看>>
SDN市场或许进入了慢热期
查看>>
教你使用Linux系统的Shell脚本维护Oracle
查看>>
力龙信息布局大数据领域
查看>>
大数据巧治职业差评师 生存空间锐减九成
查看>>
天津开展免费无线局域网建设
查看>>
朝鲜最新消息|今天勒索病毒跟朝鲜黑客有关
查看>>
提高信息安全意识对网络勒索病毒说不
查看>>
英国政府可能利用曼彻斯特自杀袭击要求互联网公司破解加密
查看>>
Mozilla 将大幅简化火狐浏览器的同步操作
查看>>
微软加大在 Edge/IE 浏览器上阻止 SHA-1 证书的力度
查看>>
龙芯将两款 CPU 核开源,这意味着什么?
查看>>
《51单片机应用开发从入门到精通》——导读
查看>>
PostgreSQL 锁解密
查看>>
snoopy 模拟表单提交(1)
查看>>
从软件技术演变到软件项目管理的进步
查看>>
云数据库与传统数据库有什么区别
查看>>
【Python之旅】第七篇(二):Redis使用基础
查看>>