shell脚本之流程控制
shell脚本之流程控制
条件语句
选择执行:
注意:if语句可嵌套
单分支
if 判断条件;then
条件为真的分支代码
fi
双分支
if 判断条件; then
条件为真的分支代码
else
条件为假的分支代码
fi
多分支
if 判断条件1; then
条件为真的分支代码
elif 判断条件2; then
条件为真的分支代码
elif 判断条件3; then
条件为真的分支代码
else
以上条件都为假的分支代码
fi
逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if语句
示例:
if ping -c -W station1 &>/dev/null;then
echo'Station1isUP'
elif grep"station1"~/maintenance.txt&>/dev/null ;then
echo'Station1isundergoingmaintenance‘
else
echo'Station1isunexpectedlyDOWN!' exit1
fi
条件判断
case 变量引用in
PAT1)
分支1
;;
PAT2)
分支2
;;
...
*)
默认分支
;;
esac
case支持glob风格的通配符:
*:任意长度任意字符?:任意单个字符[]:指定范围内的任意单个字符a|b: a或b
循环语句for,while,until
for循环
for 变量名in 列表;do
循环体
done
执行机制:
依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束
列表生成方式:
- (1) 直接给出列表
- (2) 整数列表:
- (a) {start..end}
- (b) $(seq[start [step]] end)
- (3) 返回列表的命令 $(COMMAND)
- (4) 使用glob,如:*.sh
- (5) 变量引用;$@, $*
while循环
while CONDITION; do
循环体
done
`CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环
因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正
进入条件:CONDITION为true
退出条件:CONDITION为false
until循环
until CONDITION; do
循环体
done
CONDITION同while
进入条件:CONDITION 为false
退出条件:CONDITION 为true
循环控制语句continue
continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为第1层
while CONDTIITON1; do
CMD1
...
if CONDITION2; then
continue
fi
CMDn
...
done
循环控制语句break
break [N]:提前结束第N层循环,最内层为第1层
while CONDTIITON1; do
CMD1
...
if CONDITION2; then
break
fi
CMDn
...
done
循环控制shift命令
用于将参量列表list 左移指定次数,缺省为左移一次。
参量列表list 一旦被移动,最左端的那个参数就从列表中删除。while循环遍历位置参量列表时,常用到shift。
./doit.sh a b c d e f g h
./shfit.sh a b c d e f g h
#!/bin/bash
# Name: doit.sh
# Purpose: shift through command line arguments
# Usage: doit.sh [args] while[ $# -gt ] # or (( $# > ))
do
echo $*
shift
done
#!/bin/bash
#step through all the positional parameters until[-z "$1"]
do
echo "$1"
shift
done
echo
创建无限循环
while true;do
循环体
done
until false;do
循环体
done
while的特殊用法
while循环的特殊用法(遍历文件的每一行):
while read line; do
循环体
done < /PATH/FROM/SOMEFILE
依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将行赋值给变量line
for的特殊用法
双小括号方法,即((…))格式,也可以用于算术运算
双小括号方法也可以使bash Shell实现C语言风格的变量操作
I=10
((I++))
for ((控制变量初始化;条件判断表达式;控制变量的修正表达式))
do
循环体
done
控制变量初始化:仅在运行到循环代码段时执行一次
控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断
例如:
for((i=;i<=;i++))
do
echo "Helllo I am $i"
done
select循环与菜单
select variable in list
do
循环体命令
done
select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示PS3 提示符,等待用户输入。
用户输入菜单列表中的某个数字,执行相应的命令
用户输入被保存在内置变量REPLY 中
select与case
select 是个无限循环,因此要记住用break命令退出循环,或用exit命令终止脚本。也可以按ctrl+c 退出循环。
select 经常和case 联合使用
与for 循环类似,可以省略in list,此时使用位置参量
示例:
PS3="please input numbert: "
select menu in 羊肉汤 米饭 胡辣汤 饺子 拉面 烩面 quit;do
case $REPLY in
)
echo "羊肉汤,the price is 15."
;;
)
echo "米饭,the price is 12."
;;
)
echo "胡辣汤,the price is 30."
;;
4)
echo "饺子,the price is 20."
;;
)
echo "拉面,the price is 12."
;;
)
echo "烩面,the price is 10."
;;
)
break
;;
esac
done
信号捕捉trap
trap '触发指令' 信号
自定义进程收到系统发出的指定信号后,将执行触发指令,而不会执行原操作
trap '' 信号
忽略信号的操作
trap '-' 信号
恢复原信号的操作
trap -p
列出自定义信号操作
示例:
#!/bin/bash trap 'echo "signal:SIGINT"' int trap -p
for((i=;i<=;i++))
do
sleep
echo $i
done trap '' int
trap -p
for((i=;i<=;i++))
do
sleep
echo $i
done trap '-' int
trap -p
for((i=;i<=;i++))
do
sleep
echo $i
done
shell脚本之流程控制的更多相关文章
- shell脚本 3 流程控制
shell流程控制 流程控制是改变程序运行顺序的指令.linux shell有一套自己的流程控制语句,其中包括条件语句(if),循环语句(for,while),选择语句(case).下面我将通过例子介 ...
- Shell脚本学习 - 流程控制和函数
继续Shell的学习.上两篇是关于基本数据类型,基本语法以及运算符相关,这一篇是流程控制相关(if, for, while) 流程控制 if else 流程控制不可为空,如果else没有语句执行,就不 ...
- Shell脚本之流程控制(if、for、while)
if 判断 if语句的三种格式: (1)if (2)if else (3)if elif else 语法格式如下: #if 语法格式 if 条件 then 命令1... 命令2... fi #if e ...
- shell脚本(10)-流程控制while
一.while循环介绍 while循环与for一样,一般不知道循环次数使用for,不知道循环的次数时推荐使用while 二.while语法 while [ condition ] #条件为真才会循环, ...
- shell脚本(11)-流程控制case
一.case介绍 生产环境下,遇到要根据不同的状况执行不同的预案的情况,首先根据可能出现的情况写出对应预案,根据出现的情况来加载不同的预案 特点:根据给予的不同的代码块 二.case语法 case 变 ...
- 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!
http://blog.csdn.net/xiaominghimi/article/details/7603003 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区 ...
- Shell命令和流程控制
Shell命令和流程控制 在shell脚本中可以使用三类命令: 1)Unix 命令: 虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令.这些命令通常是用来进行文件和文字 ...
- Shell脚本的条件控制和循环语句
条件判断:if语句 语法格式: if [ expression ] then Statement(s) to be executed if expression is true fi 注意:expre ...
- Shell命令和流程控制[linux常用命令的使用]
在shell脚本中使用三类命令: unix命令 概念:管道.重定向.backtick 流程控制 1 unix命令 echo "some text":在屏幕上输出信息 ls:文件列表 ...
随机推荐
- 连上Wi-Fi 热点自动弹窗的实现方法
当我们连上某个热点, 自动弹出登录窗口的专业名称叫做: Captive portal 原理, 实现方式有三种 1 : dns 跳转, 在热点上面实现配置, 把所有dns请求返回都配置为:服务器地址 : ...
- Linux云计算 面试时最常遇到的40个问题
1)使用云计算有哪些优点? 使用云计算有下列优点: a)备份数据和存储数据b)强大的服务器功能c)SaaS(软件即服务)d)信息技术沙盒功能e)提高生产力f)具有成本效益,并节省时间 2)可否列举哪些 ...
- 【win10】大水牛主机插入耳机没有声音
主机:大水牛,技嘉主板 操作系统:win10 问题:主机前面插入耳机,没有声音,扬声器图标出错 解决 一..插入耳机 二..Realtek高清晰音频管理器 1.打开音频管理器,点击右下角的设置 2.点 ...
- 【JSP 标签】格式化日期
在使用JSP开发页面时,java.util.Date在JSP页面直接输出的格式不好看,需要进行格式化. <%@ page language="java" contentTyp ...
- win7怎么更换锁屏壁纸
win7怎么更换锁屏壁纸... -------------------------- 按键盘组合键“Windows+R”可打开“运行”窗口,输入 “gpedit.msc” 按回 ----------- ...
- 一文看懂web服务器、应用服务器、web容器、反向代理服务器区别与联系
我们知道,不同肤色的人外貌差别很大,而双胞胎的辨识很难.有意思的是Web服务器/Web容器/Web应用程序服务器/反向代理有点像四胞胎,在网络上经常一起出现.本文将带读者对这四个相似概念如何区分. 1 ...
- web中转发、重定向等问题的路径
web中常用路径,转发,重定向,form表单action的路径 路径的写法: a.绝对路径写法:ServeltContext都必须用绝对路径."/" b.相对路径:其他情况都可以使 ...
- Servlet中Response对象应用1(输出简单文字、实现文件下载)
通过response对象可以实现很多功能,下面的代码都是在myeclipse上实现过的,整理下路,以备后用. response对象应用1 1向客户端发送简单消息 A利用已经声明的对象,调用其getOu ...
- web安全:QQ号快速登录漏洞及被盗原理
为什么你什么都没干,但QQ空间中却发了很多小广告?也许你的QQ账号已经被盗.本文将讲解一个QQ的快速登录的漏洞. 我前阵子在论坛上看到一个QQ的快速登录的漏洞,觉得非常不错,所以把部分原文给转到园子来 ...
- Mysql 分区详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt120 一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.m ...