linux下的脚本实例,【学习】Linux Shell脚本实例之一

1.程序流程控制实例

程序流程控制,实际上就是改变程序的执行顺序。程序在执行过程中若流程被改变,就可能导致输出不同,因此利用这一特性就能够实现程序执行结果的控制。程序流程控制可分为“选择”和“循环”这两类,在需要根据实际需求的不同实现不同的输出时,就可以改变程序的执行流程。

(1)for循环语句

基于for语句的循环,基于继续执行循环或者结束循环的方式。在for执行命令前,其会先检查所要执行的列表中所指定的值是否还有未使用的,若有未使用的就赋值并执行列表,直到列表中的值全部都使用过后才退出循环。

如下是一个简单的 for 控制语句的脚本程序,其使用“星期”作为变量名,并从列表中读取值,直到读取完成后退出。

0a69a25b4f0cf2e31071b776ce6317d2.png

我们执行一下

7c3c43bedbc69f41faa9b08f5cb3700c.png

说明:

第03 行,所定义的变量名为week,其值为Monday~ Sunday。

第05行,使用echo回显变量week的值。

(2)while循环语句

while循环语句结构是一种执行一系列命令的语句结构,它所执行的命令由测试条件所决定,这些条件定义语句是否继续执行。

在 while 循环语句中执行命令,若条件为真,则将过程执行一遍并回到开始处,接着再次进行条件的判断,若条件仍然是真,则接着再执行一遍,直到条件为假时才退出循环。如下是一个数值运算的while循环脚本,其实现的是数值相加运算。

56d015aa8f62c7a9aa9400bd17f3a26a.png

执行一下看一下结果

7f4a205691f02d6928dea5c2c82e2551.png

说明:

第03和04行,声明x和sum都为整型变量并赋予初始值。

第05行,条件测试。

第06~09行,这是一个循环体,当执行遇到done后,跳到第06行处继续执行,直到条件不满足时退出循环。

第10行,输出总数值。

(3)until循环语句

与for和while循环体一样,until循环也执行一系列的命令,直到条件满足后退出循环。until循环在循环体的顶部继续判断条件,直到条件为真时结束循环,否则一直执行。

以下脚本使用until语句来实现一个简单的、不断循环的输出预设值,直到人为干预时结束循环(按Ctrl+C组合键退出)。

2d86be7547f35a4857b6835469c2f381.png

(4)if选择分支语句

d6745f66bc7a07b94726a44143eaa5ec.png

看一下执行结果:

ce4f7d015d5e455ac6b0929882eb8e69.png

说明:

第03行,使用cat命令从当前目录的testwhile.sh文件中读取信息,然后通过管道传送到grep命令进行过滤。其中,^ 表示检查的关键字是该行的开始。

第04行,若所需查看的信息存在,则输出提示。

第05行,if语句结束的标记。

if语句的另外一种结构是if-then-else,这种if语句可以实现先判断,然后根据判断的结果选择执行脚本代码块,也就是说,不管条件判断的结果怎么样都有输出。如下实例的主要作用是将读取到的数值与预设值对比,然后根据对比结果执行代码。

3a973488282155b4551e72d4e37af7a0.png

看一下执行结果:

cdda706e984ae8aacc0e4e9068b76052.png

说明:

第03行:提示用户输入。

第04行,读取用户的输入并放到JOB变量中。

第05~10行,判断输入的值并执行对应的代码块。

(5)case选择语句

若需要判断的条件达到一定数量,仍选择使用if语句来实现,语句就会变得不易编写且代码变得沉长,同时也给日后的维护工作带来不便。

case语句的出现,在很大程度上弥补了if语句的不足,case语句允许通过条件的判断选择执行不同的代码块。但需要注意的是,case对变量的使用不是强制性的,且每条语句都以右小括号结尾,每个代码块都以两个分号结尾。

通过case结构来实现为多分支功能,可以使程序代码不但易读而且其结构更加简洁。下面使用case结构来实现一个名字检索脚本,脚本中的变量值在条件成立时就执行相应代码。脚本的命令读取输入信息,并判断是否存在所输入的信息,之后就执行相应的代码块。

对于以上的问题,可以,看如下的例子。

d1e647b858eacca506cb6de31eb9dab3.png

运行结果:

5929b2f8ba26aed9aec70f6e0143ae9f.png

说明:

第04行,$name中的值为待测变量。

第06行,需要与待测变量值对比的预设值。

第09行,输出一个空行。

第11行,如果第05行的值与预设值都不同,则对比此处的值。

第16行,case语句结束的标记。

完成之后,将所写的代码进行保存然后退出。

2.算术运算实例

算术是数学中最古老、最基础和最初等的部分,它研究的是数的性质和运算。从数学的本质上来说,算术属于一种映射,是一种获得新变量的可能组合。而常说的从算术中所得到的新变量,其实是由算术式的运算得到的。

算术式是由运算符和操作数组成,如:3+6。其中的运算符为加号(+),而操作数为3和6,所映射得到的新量为 9。在算术式中,其可以包含变量、变量扩展。在进行算术计算前,变量会被替换,而在括号内的变量也会被展开。

3+6=9的加法运算,是一个最为常见的一元运算,在本质上是A+B→C的映射方式。其他常见的运算还有减法、乘法以及开方等,它们都属于一元运算,本质上是A→B形式的映射。

算术运算由运算符和操作数组成,由它们映射成一个新的量,下面是一个没有包括任何变量扩展的算术例子。

4d257fd17ecefa28846294db8f70e175.png

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

99597aeece7b4403ea1797495d365dcd.png

由于存在变量扩展,因此在运算前需要扩展变量。其操作流程是:若变量 i 的值不存在,则${i:-3}展开后其值为3,之后再与6做加法运算,其最后的结果为9。而若变量i存在值,则在扩展后取i的值,然后再与6相加。

在求值运算过程中,由于变量值不存在或者当其值为空时,该变量的值默认为0。

在一个存在变量的算术运算式中,在引用变量的值之前需要先定义,然后才可以引用。若变量没有赋予值,则在引用时视它为0。

事实上,乘除法运算与加减法也非常类似,只要将运算符修改并注意在进行除法运算时除数与被除数的一些问题就可以了。

如下:

4bd6811000923cea7ec99ff08207f28f.png

学习Linux shell脚本中连接字符串的方法

这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...

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脚本攻略》(第2版) 总结

前段时间读完了(第2版)这本书,给部分想读这本书的人分享下个人感受. 说下这本书的难度吧.纯新手或者只懂少部分编程知识的人,读起来还是有很大难度的.以我为 ...

linux ——shell 脚本

linux—shell 脚本  精简基础                 2018/10/30 13 ...

随机推荐

Android请求网络共通类——Hi_博客 Android App 开发笔记

今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

Touch ID 实现

Touch ID 1.要求 机型:iPhone 5s以上 系统:iOS8以上 框架:#import ...

OS——进程简答题(1)

1,叙述进程和程序的主要区别. 解:进程和程序是两个既有联系又有区别的两个概念,它们的主要区别如下: (1)程序是指令的有序集合,其本身没有任何运行的含义,它是一个静态的概念.而进程是程序在处理机上的 ...

1042: [HAOI2008]硬币购物 - BZOJ

Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法.Input 第一行 ...

JQuery zoom插件学习

jquery zoom是一款图片放大插件,经常用在商城商品页面里. 使用JQuery zoom插件,除了需要引入JQuery.js外,还要引入JQuery.zoom.js文件及jqzoom.css文件 ...

【.Net Remoting-1】

[.NetRemoting]2015.09.16 [分布式应用程序] 应用程序分布在不同计算机上,通过网络来共同完成一项任务 C/S架构[模式] [互操作性,Interoperability]又称[互 ...

c++ 读取不了hdf5文件中的字符串

问题描述: 在拿到一个hdf5文件,想用c++去读取文件中的字符串,但是会报错:read failed ps: c++读取hdf5的字符串方法见:https://support.hdfgroup.or ...

python数据结构之堆(heap)

本篇学习内容为堆的性质.python实现插入与删除操作.堆复杂度表.python内置方法生成堆. 区分堆(heap)与栈(stack):堆与二叉树有关,像一堆金字塔型泥沙:而栈像一个直立垃圾桶,一列下 ...

c++利用类进行单链表的插入,删除,清空操作

#if 1 #include #include #include #include

C# 未能加载文件或程序集“ Newtonsoft.Json” Json格式错误

原因:版本不一致,所使用的dll和配置文件中的版本不一致.解决: (1)查看所使用的Newtonsoft.Json.dll版本 ,然后把对应的版本修改在配置文件中如下,比如版本为“4.5.0.0” 修 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值