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脚本-循环选择语句的更多相关文章

  1. 3.shell脚本循环试题

    shell脚本循环试题 1.计算从1到100所有整数的和 #!/bin/bash a=0 for i in {1..100} #1到100 #每次循环变量i的值也为循环次数 do a=$[ $a + ...

  2. Linux Shell脚本编程while语句

    Linux Shell脚本编程while语句案例 1,每隔3秒,打印一次系统负载 #!/bin/bash while truedo    uptime    sleep 3done 2,把监控结果保存 ...

  3. 没事就要多做多练,Shell脚本循环例题做一做

    Shell脚本循环例题                 一.示例1                 二.示例2                 三.示例3                 四.示例4 ...

  4. shell 脚本之判断语句 if 详解

    使用 Linux 系统这么长时间,对 shell 脚本也算是比较熟悉.其实不管是搞开发,还是搞运维,shell 脚本都是必备的基本技能.这次抽时间好好总结一下 shell 方面的知识,综合的再学习一下 ...

  5. Shell脚本之七 选择、循环结构

    一.if else if 语法格式 if condition then command1 command2 ... commandN fi 写成一行(适用于终端命令提示符): if [ $(ps -e ...

  6. shell脚本、if语句、for循环语句

    shell在shell脚本中,如果用户不输入东西,系统不自动退出,this is a bug!文件测试语句:-d -f -r -w -x -e逻辑测试语句:“&&”与(同时满足) “| ...

  7. shell脚本循环执行mysql语句

    参考资料:Shell脚本中执行mysql语句 需求:数据库里有张数据表存储的是用户对电影的评价(user_id movie_id rating time),但是我现在要每部电影的总评分. 解决方法: ...

  8. shell脚本循环嵌套

    嵌套循环 在循环语句内使用任意类型的命令,包括其他循环命令,叫做嵌套循环.因为是在迭代中迭代,需要注意变量的使用以及程序的效率问题. 下面举一个for循环嵌套for循环的例子: wangsx@SC-2 ...

  9. 《linux就该这么学》第五节课,shell脚本的各种语句!

    第四章shell语句 (据课本和虚拟机实验排版,借鉴请改动)               4.2:shell脚本   脚本包括:脚本声明,脚本注释,脚本内容和命令 例:#!/bin/bash      ...

随机推荐

  1. jekyll本地环境搭建(Windows)

    序:最近一直在搞Github建站,所以一直没机会写文章,那边的环境虽然搞好了,但是网站的界面却是个问题,不想用别人的,总想自己设计个,却感觉没经验吧,就一直耽搁了.所以也就没心情在那边写文章,很久没写 ...

  2. (2) GoJS Node简介

    node GoJS提供了非常简单的创建Node节点的方法,可将文本内容.结点形状.背景颜色.边距等属性通过数据绑定[go.Binding]直接绑定到对应的Node数据中. 本文简单介绍Node的创建过 ...

  3. python面试题之如何在Python中创建自己的包

    Python中创建包是比较方便的,只需要在当前目录建立一个文件夹, 文件夹中包含一个__init__.py文件和若干个模块文件, 其中__init__.py可以是一个空文件,但还是建议将包中所有需要导 ...

  4. Mac安装virtualwrapper时报错No module named virtualenvwrapper

    1. 前言 我在使用mac安装virtualwrapper的时候遇到了问题,搞了好长时间,才弄好,在这里总结一下分享出来,供遇到相同的问题的朋友使用,少走些弯路. 2. 问题说明 Mac默认系统的py ...

  5. HYSBZ - 1050(旅行comf 并查集Java实现)

    HYSBZ - 1050(旅行comf Java实现) 原题地址 解法:枚举每一条边,对于这条边,我们需要找到集合中和其值相差最小的最大边,这个集合是指与包括i边在内的ST联通集.对于这一要求,我们只 ...

  6. BZOJ 2806 Luogu P4022 [CTSC2012]Cheat (广义后缀自动机、DP、二分、单调队列)

    题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=2806 (luogu) https://www.luogu.org/pro ...

  7. App后台开发运维和架构实践学习总结(5)——App产品从需求到研发到开发到上线到产品迭代全过程

    前言 如果没有做过开发,研发过产品的人,很难体会做产品的艰难,刚进公司的人,一般充当的是程序开发,我这里说的是开发,它与研发是有区别的. 一个需求下来,如果不能很好地理解产品需求,如果不能很好的驾驭需 ...

  8. Cow Sorting POJ 3270 & HDU 2838

    题目网址:http://poj.org/problem?id=3270 题目大意是:一串无序的数字,要排成增序的数列,可以交换不相邻的数,每交换两个数,sum+这两个数,使得sum最小,求最小的sum ...

  9. Leetcode 133.克隆图

    克隆图 克隆一张无向图,图中的每个节点包含一个 label (标签)和一个 neighbors (邻接点)列表 . OJ的无向图序列化: 节点被唯一标记. 我们用 # 作为每个节点的分隔符,用 , 作 ...

  10. Leetcode 76.最小覆盖子串

    最小覆盖子串 给定一个字符串 S 和一个字符串 T,请在 S 中找出包含 T 所有字母的最小子串. 示例: 输入: S = "ADOBECODEBANC", T = "A ...