本文主要介绍Shell脚本中的流程控制语句,包括if/else、case,循环语句包括for循环、while循环、until循环等内容。并通过简单实例介绍它们的使用方法。

if语句

(1)最简单的if语句。使用格式有2种方式,分别如下

使用格式1:

if [ 条件判断式 ];then
程序段
fi

使用格式2:

if [ 条件判断式 ]
then
程序段
fi

特别说明:

(1)建议使用格式1。格式1和格式2的区别是then重新换行以及是否带命令分隔符";"。

(2)if语句使用fi结尾。否则报错。

下面看一个简单示例。

#!/bin/bash

num1=
num2=
if [ "${num1}" -lt "${num2}" ];then
echo "${num1} is less than ${num2}"
fi

(2)简单的if else语句,使用格式如下:

if [ 条件判断式 ];then
程序段
else
程序段
fi

使用if/else语句修改比较数值大小的实例,如下

#!/bin/bash

num1=
num2=
if [ "${num1}" -lt "${num2}" ];then
echo "${num1} is less than ${num2}"
else
echo "${num1} is greater than ${num2}"
fi

(3)多分支的if else语句,使用格式如下:

if [ 条件判断式1 ];then
程序段
elif [ 条件判断式2 ];then
程序段
else
程序段
fi

继续修改比较数值大小的实例,代码如下

#!/bin/bash

num1=
num2=
if [ "${num1}" -lt "${num2}" ];then
echo "${num1} is less than ${num2}"
elif [ "${num1}" -gt "${num2}" ];then
echo "${num1} is greater than ${num2}"
else
echo "${num1} is equal to ${num2}"
fi

case语句

case语句为多选择语句,可以用case语句匹配一个值或者一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:

case 值 in
模式1)
程序段1
;;
模式2)
程序段2
;;
……
*)
程序段n
;;
esac

模式可以是变量或常数,可以包含元字符。其中*表示任意字符、?表示任意单一字符、[..]表示范围中的任意字符。下面通过实例来了解case语句用法。

#!/bin/bash

read -p "Please input yes or no:" YN

case "${YN}" in
Yes)
echo "Input Yes"
;;
No)
echo "Input No"
;;
yes|YES)
echo "please input yes"
;;
NO|no)
echo "please input no"
;;
*)
echo "input error"
;;
esac

for循环

(1)最简单的for循环语句,使用格式如下:

for 变量名 in 值1 值2 值3 ... 值n
do
程序段
done

for循环工作时会对in后面的变量值逐一遍历取值并进入程序段操作。使用基本实例如下:

#!/bin/bash

for i in $(seq  )
do
echo $i
done

(2)for循环的第二种格式如下

for((初始值;限制值;执行步长))
do
程序段
done

该类型for循环适合数值方式的运算中。简单实例如下

#!/bin/bash

for((i=;i<=;i++))
do
echo $i
done

while循环

while循环用于不断执行一系列命令,也用于从输入文件中读取数据,使用格式如下:

while 命令
do
程序段
done

(1)打印1~100的整数

#!/bin/bash

i=
while [ $i -le ]
do
echo $i
i=$(($i+))
done

(2)从文件中读取数据,打印每一行内容

#!/bin/bash

while read line
do
echo $line
done < /etc/passwd

(3)从文件中读入,并赋值给对应的变量。假设student.txt文件中每一行包含3列分别为Name、Age、Address,字段分隔符为空格。

#!/bin/bash

while read NAME AGE ADDRESS
do
echo "name=${NAME}"
echo "age=${AGE}"
echo "address=${ADDRESS}"
done < student.txt

(4)如果实例(3)中的student.txt文件字段分隔符为冒号":",可以使用变量IFS处理,处理方法如下:

#!/bin/bash

OLD_IFS=$IFS
IFS=":" while read NAME AGE ADDRESS
do
echo "name=${NAME}"
echo "age=${AGE}"
echo "address=${ADDRESS}"
done < student.txt IFS=${OLD_IFS}

until循环

until循环执行一系列命令直至条件为真时停止。until循环会执行一次程序体再判断测试条件。测试条件为真,则执行退出。某些场景下,until循环会比while循环更好用。使用格式为如下:

until 命令
do
程序段
done

(1)打印1~100的整数

#!/bin/bash

i=
until [ $i -gt ]
do
echo $i
i=$(($i+))
done

break和continue使用

有时需要基于某些准则退出循环或者跳过循环步。其中break命令允许跳出循环、continue用于跳出当次循环。

(1)打印小于50的整数。

#!/bin/bash

i=
while [ $i -le ]
do
echo $i
i=$(($i+))
if [ $i -gt ];then
break
fi
done

(2)打印1-100以内的偶数。

#!/bin/bash

i=
while [ $i -le ]
do
if [ $(expr $i % ) -eq ];then
echo $i
fi
i=$(($i+))
done

shell流程控制与循环结构的更多相关文章

  1. 053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结

    053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结 本文知识点: 流程控制知识总结 流程控制知识总结 选择结构语句 循环结构语句 ...

  2. 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序

    052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...

  3. 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1

    051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...

  4. 050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句

    050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句 本文知识点:continue语句 continue语句 continue ...

  5. 049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句

    049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句 本文知识点:break语句 break语句 break语句前情回顾 1.swi ...

  6. 048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例——阶乘的累加和

    048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例--阶乘的累加和 本文知识点:通过案例练习嵌套循环应用 案例练习--阶乘的累加和 案例题目 ...

  7. 047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用

    047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用 本文知识点:嵌套while循环应用 什么是循环嵌套? 什么是循环嵌套? ...

  8. 046 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 08 for循环的注意事项

    046 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 08 for循环的注意事项 本文知识点:for循环的注意事项 for循环的注意事项 for循环有3个 ...

  9. 045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围

    045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围 本文知识点:for循环应用及局部变量作用范围 for循环 w ...

随机推荐

  1. C# 连接数据库实现增删改查

    class Program { private static string urls = "server=127.0.0.1;port=3306;user=root;password=123 ...

  2. Windows Server 2012 R2 无法启用Microsoft .NET Framework 3.5 功能

    1 在新windows 2012 R2 上安装SQL 2014 ,提示需要安装 .NET Framework 3.5 2 在添加角色和功能--功能--.NET Framework 3.5,然后失败 3 ...

  3. Jupyter配置步骤

    Jupyter是基于浏览器的可交互式开发工具,在数据科学界非常受欢迎,它功能齐全,使用方便,是一款数据分析和建模挖掘的利器. 本文简介Jupyter的配置和使用过程 一.修改添加国内镜像 通常我会先安 ...

  4. c语言数据类型(一)

    (强数据类型) 1.常量 常量是程序中不可变的量 10为常量 两种常量 #define 定义宏常量 const #对于#define 类型的常量,c语言的习惯是常量名称大写, 对于普通const常量以 ...

  5. python——前端常用的标签

    1.meat标签 meta标签的使用 meta标签共有两个属性:http-equiv和name;不同的属性又有不同的参数值,这些不同的参数值就实现了不同的网页功能. name属性 name属性主要用于 ...

  6. lunix nginx安装 报错页面 状态码

    web服务器软件IIS  (windows底下的web服务器软件) Nginx (Linux底下新一代高性能的web服务器)  Tengine   www.taobao.com  这是淘宝 Apach ...

  7. 关于 java jdk 环境变量的配置

    最近在学习java , 关于java 环境变量的配置,我想总结一下自己在这方面的经验,可供大家参考: 右键单击“我的电脑” --->"属性” ---> "高级属性设置& ...

  8. SpringBoot入门 (十) 发送邮件

    本文记录学习在SpringBoot中发送邮件. 一 邮件发送过程 发送邮件是一个我们在项目中经常会用到的功能,如在用户注册时发送验证码,账户激活等都会用到.完整的一个邮件发送过程主要包含以下几个步骤: ...

  9. 傅立叶变换系列(五)快速傅立叶变换(FFT)

    说明: 傅里叶级数.傅里叶变换.离散傅里叶变换.短时傅里叶变换...这些理解和应用都非常难,网上的文章有两个极端:“Esay”  Or  “Boring”!如果单独看一两篇文章就弄懂傅里叶,那说明你真 ...

  10. [Unity工具]CSV工具类

    参考链接: https://www.cnblogs.com/lulianqi/p/6385503.html http://blog.csdn.net/paul342/article/details/2 ...