shell脚本-循环选择语句
shell脚本-循环选择语句
过程式编程语言:
顺序执行
选择执行
循环执行
注:条件中的变量,可以在执行语句中使用,不用在加上"$"。
if语句
根据命令的退出状态来执行命令
单分支
if 判断条件;then
条件为真的分支代码
fi
双分支
if 判断条件; then
条件为真的分支代码
else
条件为假的分支代码
fi
多分支
if 判断条件 1 ; then
条件为真的分支代码
elif 判断条件 2 ; then
条件为真的分支代码
elif 判断条件 3 ; then
条件为真的分支代码
else
以上条件都为假的分支代码
fi
逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if 语句
case 语句
case用法:
case 变量引用 in
PAT1)
分支1
;;
PAT2)
分支2
;;
...
*)
默认分支
;;
esac
case 支持glob 风格的通配符:
*: 任意长度任意字符
?: 任意单个字符
[]:指定范围内的任意单个字符
a|b: a 或b
for语句
for 变量名 in 列表;do
循环体
done
依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束。
or
for ((exp1;exp2;exp3)); do
COMMANDS
done
控制变量初始化:仅在运行到循环代码段时执行一次
控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断
列表生成方式:
直接给出列表
整数列表:
(a) {start..end}
(b) $(seq [start [step]] end)==` `
返回列表的命令
$(COMMAND)
使用glob,如:*.sh
变量引用;
$@, $*
while语句
while CONDITION; do
循环体
done
CONDITION:
循环控制条件,进入循环之前,先做一次判断,每一次循环之后会再次做判断。
条件为"true" ,则执行一次循环,直到条件测试状态为"false" 终止循环。
CONDTION 一般应该有循环控制变量,而此变量的值会在循环体不断地被修正。
进入条件:
CONDITION 为true
退出条件:
CONDITION 为false
特殊用法
遍历文件的每一行
while read line(任意); do
循环体
done < /PATH/FROM/SOMEFILE
or
命令、文件或其他(标准输出) |while read line; do
循环体
done
依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将行赋值给变量line
until语句
until CONDITION; do
循环体
done
CONDITION:
循环控制条件,进入循环之前,先做一次判断,每一次循环之后会再次做判断。
条件为"false" ,则执行一次循环,直到条件测试状态为"true" 终止循环。
CONDTION 一般应该有循环控制变量,而此变量的值会在循环体不断地被修正。
进入条件:
CONDITION 为false
退出条件:
CONDITION 为true
控制语句
continue
用于循环体中,直接继续下个循环。
continue [N],提前结束第N层的本轮循环,而直接进入下一轮判断,最内层为第1层。
break
用于循环体中,退出整个循环。
break [N],提前结束第N层循环,最内层为第1层。
shift
用于将参量列表list左移指定次数,缺省为左移一次。
shift [n],移动N个位置,参量列表list 一旦被移动,最左端的那个参数就从列表中删除。
while 到循环遍历位置参量列表时,常用到 shift。
$1=a, $2=b, $c=d
shift
$1=b, $2=d
shift
$1=d
wait
用于等待命令执行结束,并exit 退出
select语句
select 变量名 in LIST ; do
循环体命令
done
select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示 PS3 提示符,等待用户输入。
用户输入菜单列表中的某个数字,执行相应的命令。
用户输入被保存在内置变量 REPLY中。
PS3="INPUT:"
select menu in bai hei hong lv;do
echo $menu
done
select与case的对比
select 是个无限循环,因此要记住用 break令退出循环,或用 exit命令终止脚本,也可以按 ctrl+c退出循环。
select 经常和 case 联合使用
与for循环类似,可以省略in LIST,此时使用位置参量。

trap信号捕捉
trap ' 触发指令' 信号
自定义进程收到系统发出的指定信号后,将执行触发指令,而不会执行原操作。
trap ' ' 信号
忽略信号的操作
trap '-' 信号
恢复原信号的操作
trap -p
列出自定义信号操作
trap 示例
#!/bin/bash
trap 'echo “signal:SIGINT"' int
trap -p
for((i=0;i<=10;i++))
do
sleep 1
echo $i
done
trap '' int
trap -p
for((i=11;i<=20;i++))
do
sleep 1
echo $i
done
trap '-' int
trap -p
for((i=21;i<=30;i++))
do
sleep 1
echo $i
done
shell脚本-循环选择语句的更多相关文章
- 3.shell脚本循环试题
shell脚本循环试题 1.计算从1到100所有整数的和 #!/bin/bash a=0 for i in {1..100} #1到100 #每次循环变量i的值也为循环次数 do a=$[ $a + ...
- Linux Shell脚本编程while语句
Linux Shell脚本编程while语句案例 1,每隔3秒,打印一次系统负载 #!/bin/bash while truedo uptime sleep 3done 2,把监控结果保存 ...
- 没事就要多做多练,Shell脚本循环例题做一做
Shell脚本循环例题 一.示例1 二.示例2 三.示例3 四.示例4 ...
- shell 脚本之判断语句 if 详解
使用 Linux 系统这么长时间,对 shell 脚本也算是比较熟悉.其实不管是搞开发,还是搞运维,shell 脚本都是必备的基本技能.这次抽时间好好总结一下 shell 方面的知识,综合的再学习一下 ...
- Shell脚本之七 选择、循环结构
一.if else if 语法格式 if condition then command1 command2 ... commandN fi 写成一行(适用于终端命令提示符): if [ $(ps -e ...
- shell脚本、if语句、for循环语句
shell在shell脚本中,如果用户不输入东西,系统不自动退出,this is a bug!文件测试语句:-d -f -r -w -x -e逻辑测试语句:“&&”与(同时满足) “| ...
- shell脚本循环执行mysql语句
参考资料:Shell脚本中执行mysql语句 需求:数据库里有张数据表存储的是用户对电影的评价(user_id movie_id rating time),但是我现在要每部电影的总评分. 解决方法: ...
- shell脚本循环嵌套
嵌套循环 在循环语句内使用任意类型的命令,包括其他循环命令,叫做嵌套循环.因为是在迭代中迭代,需要注意变量的使用以及程序的效率问题. 下面举一个for循环嵌套for循环的例子: wangsx@SC-2 ...
- 《linux就该这么学》第五节课,shell脚本的各种语句!
第四章shell语句 (据课本和虚拟机实验排版,借鉴请改动) 4.2:shell脚本 脚本包括:脚本声明,脚本注释,脚本内容和命令 例:#!/bin/bash ...
随机推荐
- jekyll本地环境搭建(Windows)
序:最近一直在搞Github建站,所以一直没机会写文章,那边的环境虽然搞好了,但是网站的界面却是个问题,不想用别人的,总想自己设计个,却感觉没经验吧,就一直耽搁了.所以也就没心情在那边写文章,很久没写 ...
- (2) GoJS Node简介
node GoJS提供了非常简单的创建Node节点的方法,可将文本内容.结点形状.背景颜色.边距等属性通过数据绑定[go.Binding]直接绑定到对应的Node数据中. 本文简单介绍Node的创建过 ...
- python面试题之如何在Python中创建自己的包
Python中创建包是比较方便的,只需要在当前目录建立一个文件夹, 文件夹中包含一个__init__.py文件和若干个模块文件, 其中__init__.py可以是一个空文件,但还是建议将包中所有需要导 ...
- Mac安装virtualwrapper时报错No module named virtualenvwrapper
1. 前言 我在使用mac安装virtualwrapper的时候遇到了问题,搞了好长时间,才弄好,在这里总结一下分享出来,供遇到相同的问题的朋友使用,少走些弯路. 2. 问题说明 Mac默认系统的py ...
- HYSBZ - 1050(旅行comf 并查集Java实现)
HYSBZ - 1050(旅行comf Java实现) 原题地址 解法:枚举每一条边,对于这条边,我们需要找到集合中和其值相差最小的最大边,这个集合是指与包括i边在内的ST联通集.对于这一要求,我们只 ...
- BZOJ 2806 Luogu P4022 [CTSC2012]Cheat (广义后缀自动机、DP、二分、单调队列)
题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=2806 (luogu) https://www.luogu.org/pro ...
- App后台开发运维和架构实践学习总结(5)——App产品从需求到研发到开发到上线到产品迭代全过程
前言 如果没有做过开发,研发过产品的人,很难体会做产品的艰难,刚进公司的人,一般充当的是程序开发,我这里说的是开发,它与研发是有区别的. 一个需求下来,如果不能很好地理解产品需求,如果不能很好的驾驭需 ...
- Cow Sorting POJ 3270 & HDU 2838
题目网址:http://poj.org/problem?id=3270 题目大意是:一串无序的数字,要排成增序的数列,可以交换不相邻的数,每交换两个数,sum+这两个数,使得sum最小,求最小的sum ...
- Leetcode 133.克隆图
克隆图 克隆一张无向图,图中的每个节点包含一个 label (标签)和一个 neighbors (邻接点)列表 . OJ的无向图序列化: 节点被唯一标记. 我们用 # 作为每个节点的分隔符,用 , 作 ...
- Leetcode 76.最小覆盖子串
最小覆盖子串 给定一个字符串 S 和一个字符串 T,请在 S 中找出包含 T 所有字母的最小子串. 示例: 输入: S = "ADOBECODEBANC", T = "A ...