shell流程控制与循环结构
本文主要介绍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流程控制与循环结构的更多相关文章
- 053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结
053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结 本文知识点: 流程控制知识总结 流程控制知识总结 选择结构语句 循环结构语句 ...
- 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序
052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...
- 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...
- 050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句
050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句 本文知识点:continue语句 continue语句 continue ...
- 049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句
049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句 本文知识点:break语句 break语句 break语句前情回顾 1.swi ...
- 048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例——阶乘的累加和
048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例--阶乘的累加和 本文知识点:通过案例练习嵌套循环应用 案例练习--阶乘的累加和 案例题目 ...
- 047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用
047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用 本文知识点:嵌套while循环应用 什么是循环嵌套? 什么是循环嵌套? ...
- 046 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 08 for循环的注意事项
046 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 08 for循环的注意事项 本文知识点:for循环的注意事项 for循环的注意事项 for循环有3个 ...
- 045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围
045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围 本文知识点:for循环应用及局部变量作用范围 for循环 w ...
随机推荐
- Postgres 主从复制搭建步骤
系统版本: CentOS Linux release 7.5.1804 (Core) 数据库 psql (PostgreSQL) 10.5 2台机器ip : 172.17.0.3 /172.17.0. ...
- Scala 入门详解
Scala 入门详解 基本语法 Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的 Scala 程序是对象的集合,通过调用彼此的方法来实现消息传递.类,对象,方法,实例变 ...
- windows下安装、卸载mysql服务
将下载下来的mysql解压到指定目录下(如:d:\mysql)安装服务在命令行输入d:\mysql\bin\mysqld -installnet start mysql卸载服务在命令行输入net st ...
- http note
http 多媒体传输协议 HyperText Transfer Protocol 超文本传输协议 https Hyper Text Transfer Protocol over Secure Sock ...
- 02-创建String对象
创建一个String对象实在是太简单了,就是因为简单,所以有很多java程序员做了好几年的开发,也没有注意这些小细节问题 String字符串的本质就是char数据对象, 那么char[0]数组当中的一 ...
- servlet和jsp概述
1.servlet的作用 B/S系统:浏览器/服务器(Servlet的服务模式) Servlet是运行在web服务器或应用服务器上的java程序,它是一个中间层,负责连接来自web浏览器或其它HTTP ...
- python 实现排序算法(二)-合并排序(递归法)
#!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Tue Nov 21 22:28:09 201 ...
- Linux下Mysql自启动
如果你都是按照默认配置安装的那么只要按照如下步骤就可以了 1.cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql 将服 ...
- cocos源码分析--用Sprite加载自定义着色器
本文写一个使用动态更新属性变量的自定义着色器.在这个例子中,小图标的位置根据手指的触摸而移动,以屏幕重点为参照物,屏幕中向下的部分根据手指的点击乘以一个绿色的颜色值,向上的部分乘以一个红色的颜色值. ...
- 微信小程序 - 布局练习
1.小程序的布局就多了一个flex布局,其他和之前html没太大区别 ,先看代码: (1)wxml <view class='container'> <view class='sel ...