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. Libreswan软件的密钥协商协议IKEv1主模式实现分析

    Libreswan软件的密钥协商协议IKEv1主模式实现分析 1 协商过程 IKEv1(互联网密钥交换协议第一版)是IPsec VPN隧道协商使用的标准密钥协商协议,其协商过程如下图所示. 总共来回交 ...

  2. buf.readFloatBE()

    buf.readFloatBE(offset[, noAssert]) buf.readFloatLE(offset[, noAssert]) offset {Number} 0 noAssert { ...

  3. react入门----(this.state/表单/Ajax)

    1.this.state 组件免不了要与用户互动,React 的一大创新,就是将组件看成是一个状态机,一开始有一个初始状态,然后用户互动,导致状态变化,从而触发重新渲染 UI var TestStat ...

  4. hdu 1040

    As Easy As A+B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  5. String HDU 5672(双指针)

    String HDU 5672(双指针) 传送门 题意:一个字符串中找到所有拥有不少于k个不同的字符的子串. import java.io.*; import java.util.*; public ...

  6. 突击战 (UVA 11729)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28436 思路:任务从开始时就不停执行,与其他任务毫无关联,当然是执 ...

  7. 《阿里巴巴Java开发手册》更新为《Java开发手册》

    新版一览:华山版<Java开发手册> <阿里巴巴Java开发手册>始于阿里内部规约,在全球Java开发者共同努力下,已成为业界普遍遵循的开发规范,涵盖编程规约.异常日志.单元测 ...

  8. js中匿名函数的N种写法

    匿名函数没有实际名字,也没有指针,怎么执行? 关于匿名函数写法,很发散~ +号是让函数声明转换为函数表达式.汇总一下 最常见的用法: 代码如下: (function() {  alert('water ...

  9. 【Codeforces 490C】Hacking Cypher

    [链接] 我是链接,点我呀:) [题意] 让你把一个字符串分成左右两个部分 形成两个正数 使得这两个正数一个能被a整除,一个能被b整除 找到任意一个解就可以 [题解] 枚举分割的断点i 枚举的时候用同 ...

  10. Uva12657 Boxes in a Line

    题目链接:传送门 分析:每次操作都会花费大量时间,显然我们只需要关注每个元素的左边是啥,右边是啥就够了,那么用双向链表,l[i]表示i左边的数,r[i]表示i右边的数,每次操作模拟一下数组的变化就好了 ...