【学习】Linux Shell脚本实例之一
1.程序流程控制实例
程序流程控制,实际上就是改变程序的执行顺序。程序在执行过程中若流程被改变,就可能导致输出不同,因此利用这一特性就能够实现程序执行结果的控制。程序流程控制可分为“选择”和“循环”这两类,在需要根据实际需求的不同实现不同的输出时,就可以改变程序的执行流程。
(1)for循环语句
基于for语句的循环,基于继续执行循环或者结束循环的方式。在for执行命令前,其会先检查所要执行的列表中所指定的值是否还有未使用的,若有未使用的就赋值并执行列表,直到列表中的值全部都使用过后才退出循环。
如下是一个简单的 for 控制语句的脚本程序,其使用“星期”作为变量名,并从列表中读取值,直到读取完成后退出。

我们执行一下

说明:
第03 行,所定义的变量名为week,其值为Monday~ Sunday。
第05行,使用echo回显变量week的值。
(2)while循环语句
while循环语句结构是一种执行一系列命令的语句结构,它所执行的命令由测试条件所决定,这些条件定义语句是否继续执行。
在 while 循环语句中执行命令,若条件为真,则将过程执行一遍并回到开始处,接着再次进行条件的判断,若条件仍然是真,则接着再执行一遍,直到条件为假时才退出循环。如下是一个数值运算的while循环脚本,其实现的是数值相加运算。

执行一下看一下结果

说明:
第03和04行,声明x和sum都为整型变量并赋予初始值。
第05行,条件测试。
第06~09行,这是一个循环体,当执行遇到done后,跳到第06行处继续执行,直到条件不满足时退出循环。
第10行,输出总数值。
(3)until循环语句
与for和while循环体一样,until循环也执行一系列的命令,直到条件满足后退出循环。until循环在循环体的顶部继续判断条件,直到条件为真时结束循环,否则一直执行。
以下脚本使用until语句来实现一个简单的、不断循环的输出预设值,直到人为干预时结束循环(按Ctrl+C组合键退出)。

(4)if选择分支语句

看一下执行结果:

说明:
第03行,使用cat命令从当前目录的testwhile.sh文件中读取信息,然后通过管道传送到grep命令进行过滤。其中,^ 表示检查的关键字是该行的开始。
第04行,若所需查看的信息存在,则输出提示。
第05行,if语句结束的标记。
if语句的另外一种结构是if-then-else,这种if语句可以实现先判断,然后根据判断的结果选择执行脚本代码块,也就是说,不管条件判断的结果怎么样都有输出。如下实例的主要作用是将读取到的数值与预设值对比,然后根据对比结果执行代码。

看一下执行结果:

说明:
第03行:提示用户输入。
第04行,读取用户的输入并放到JOB变量中。
第05~10行,判断输入的值并执行对应的代码块。
(5)case选择语句
若需要判断的条件达到一定数量,仍选择使用if语句来实现,语句就会变得不易编写且代码变得沉长,同时也给日后的维护工作带来不便。
case语句的出现,在很大程度上弥补了if语句的不足,case语句允许通过条件的判断选择执行不同的代码块。但需要注意的是,case对变量的使用不是强制性的,且每条语句都以右小括号结尾,每个代码块都以两个分号结尾。
通过case结构来实现为多分支功能,可以使程序代码不但易读而且其结构更加简洁。下面使用case结构来实现一个名字检索脚本,脚本中的变量值在条件成立时就执行相应代码。脚本的命令读取输入信息,并判断是否存在所输入的信息,之后就执行相应的代码块。
对于以上的问题,可以,看如下的例子。

运行结果:

说明:
第04行,$name中的值为待测变量。
第06行,需要与待测变量值对比的预设值。
第09行,输出一个空行。
第11行,如果第05行的值与预设值都不同,则对比此处的值。
第16行,case语句结束的标记。
完成之后,将所写的代码进行保存然后退出。
2.算术运算实例
算术是数学中最古老、最基础和最初等的部分,它研究的是数的性质和运算。从数学的本质上来说,算术属于一种映射,是一种获得新变量的可能组合。而常说的从算术中所得到的新变量,其实是由算术式的运算得到的。
算术式是由运算符和操作数组成,如:3+6。其中的运算符为加号(+),而操作数为3和6,所映射得到的新量为 9。在算术式中,其可以包含变量、变量扩展。在进行算术计算前,变量会被替换,而在括号内的变量也会被展开。
3+6=9的加法运算,是一个最为常见的一元运算,在本质上是A+B→C的映射方式。其他常见的运算还有减法、乘法以及开方等,它们都属于一元运算,本质上是A→B形式的映射。
算术运算由运算符和操作数组成,由它们映射成一个新的量,下面是一个没有包括任何变量扩展的算术例子。

在算术中,运算符为加号,其操作数为3 和6,在做这个运算时并不需要进行变量展开就可以直接得到结果为9。而在一些需要包含变量以及变量扩展时,在运算之前则需要扩展变量,如下例所示。

由于存在变量扩展,因此在运算前需要扩展变量。其操作流程是:若变量 i 的值不存在,则${i:-3}展开后其值为3,之后再与6做加法运算,其最后的结果为9。而若变量i存在值,则在扩展后取i的值,然后再与6相加。
在求值运算过程中,由于变量值不存在或者当其值为空时,该变量的值默认为0。
在一个存在变量的算术运算式中,在引用变量的值之前需要先定义,然后才可以引用。若变量没有赋予值,则在引用时视它为0。
事实上,乘除法运算与加减法也非常类似,只要将运算符修改并注意在进行除法运算时除数与被除数的一些问题就可以了。
如下:

【学习】Linux Shell脚本实例之一的更多相关文章
- 学习Linux shell脚本中连接字符串的方法
这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...
- [Linux] Shell 脚本实例(超实用)
文件操作 为文件(test.sh)增加执行权限 chmod +x test.sh 列出当前文件夹下所有文件(每行输出一个) 1 #!/bin/bash 2 dir=`ls ./` 3 for i in ...
- Linux shell脚本基础学习详细介绍(完整版)二
详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...
- Linux shell脚本基础学习详细介绍(完整版)一
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
- linux shell 脚本攻略学习20--awk命令入门详解
awk生于1977年,创始人有三个,分别为 Alfred Aho,Peter Weinberger, 和 Brian Kernighan,名称源于三个创始人的姓的首字母. 作用:处理文本文件. awk ...
- 详细介绍Linux shell脚本基础学习
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
- 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程
Linux Shell脚本教程:30分钟玩转Shell脚本编程 http://c.biancheng.net/cpp/shell/
- 【学习】Linux Shell脚本编程
1.脚本的组成和执行 Linux shell脚本的结构并不复杂,其主要由变量.内部命令以及shell的语法结构和一些函数.其他命令行的程序等组成,以下是一个简单的shell脚本. #!/bin/bas ...
- 前端学习 linux —— shell 编程
前端学习 linux - shell 编程 shell 原意是"外壳",与 kernel(内核)相对应,比喻内核外的一层,是用户和内核沟通的桥梁.shell 有很多种,国内通常使用 ...
随机推荐
- 优化之Aggregator组件
Aggregator组件通常会降低性能,因为它们必须在处理数据之前对数据进行分组 Aggregator组件需要额外的内存来保存中间组结果 通过如下方式对Aggregator组件进行优化 简化group ...
- cassandra 3.x官方文档(7)---内部原理之如何读写数据
写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...
- Python内置函数(34)——isinstance
英文文档: isinstance(object, classinfo) Return true if the object argument is an instance of the classin ...
- Nginx学习系列三Nginx的启动、停止、修改配置文件后重启
1.启动Nginx 命令规则:Ngxin的安装地址 -c Nginx的安装地址下的配置文件地址 注意:一般都在root权限下进行Nginx的启动 2.停止Nginx (1).从容停止 第一步:查看Ng ...
- 玩转ASP.NET Core中的日志组件
简介 日志组件,作为程序员使用频率最高的组件,给程序员开发调试程序提供了必要的信息.ASP.NET Core中内置了一个通用日志接口ILogger,并实现了多种内置的日志提供器,例如 Console ...
- Chapter 5 Blood Type——18
"The Red Cross is having a blood drive in Port Angeles next weekend, so I thought you should al ...
- Java类文件的结构
Class文件是以8位字节为基础单位的二进制流,各部分中间没有分隔符.遇到8位字节以上的空间数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储. Class文件采用类似C语言的伪结构体来存储 ...
- Redis【入门】就这一篇!
Redis 概述 在我们日常的Java Web开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一 ...
- Linux基础知识第四讲,文件内容命令
目录 一丶常用命令 1.cat命令演示以及常用选项 2.grep 搜索命令的使用 3.echo 以及 重定向的使用 4.管道概念 一丶常用命令 序号 命令 对应英文 作用 01 cat 文件名 con ...
- java内部类深入详解 内部类的分类 特点 定义方式 使用
本文关键词: java内部类 内部类的分类 特点 定义方式 使用 外部类调用内部类 多层嵌套内部类 内部类访问外部类属性 接口中的内部类 内部类的继承 内部类的覆盖 局部内部类 成员内 ...