小苏的Shell编程笔记之五--Shell的控制结构
任何编程语言都有控制结构,Shell也不例外,这些也是需要牢记的。
1. if 结构
最简单的判断形式就是if结构。语法为:
if 表达式
then 命令行
{else 命令行}
fi
当然,if也可以嵌套使用,如下所示
if 表达式
then 命令行
else
if 表达式
then 命令行
else 命令行
fi
fi
2. case结构
分支结构case是一个多路分支判断结构,可以测试一个表达式的值,并根据值的结果选择相应的分支程序。也就是可以替代if..then..elif..结构,语法为:
case 表达式 in
模式1) 命令1;; //模式里可有多个选项,可用|表示或关系,但必须以)结束
模式2) 命令2;; //每个命令分支必须以;;结束
…………
esac //esac表示case结构结束
另外:模式中可以使用Shell通配符。可以用*)表示都不满足的情况,相当于PHP中的switch中的default。
实例:
#!/bin/bash
WEEK=`date +%u`
case $WEEK in
6) echo “today is Saturday”;;
7) echo “today is Sunday”;;
1|2|3|4|5) echo “today is not weekend”;;
esac
当然,倒数第二行也可以换做 *) echo “today is not weekend”
实例:case的嵌套
#!/bin/bash
case $1 in
student)
case $2 in
Jim) echo”hello Jim , your number is 34”;;
Tom) echo “hello Tom, your number is 23”;;
*)echo “sorry ,I can’t find your information”;;
esac
;;
teacher)
case $2 in
Lucy) echo ”Mrs Lucy, your number is 4”;;
Mary) echo “Mrs Mary, your number is 6”;;
esac
;;
*)echo “输入不正确”
esac
3. select结构
select循环结构通常用于生成菜单,生成的菜单前面具有编号,用户敲一下编号,就执行相应的代码,可以达到交互的效果。
select的结构:
select 变量 in列表
do
命令表
done
其中,列表是一个由字符串组成的序列,在程序执行select时,该列表将以菜单的形式进行显示并等待用户输入,用户输入的选项将传递给“变量”并执行select结构体中的命令,do….done之间是select的循环体,do表示循环开始,done表示循环结束。
select总是与case结构一起使用。
可以使用break命令或者exit命令结束脚本。
select结构实例:
#!/bin/bash
echo “------查询一周计划--------”
select N in 周一 周二 周三 周四 周五 周六 周日 退出
do
case $N in
周一) echo “新的一周,又该上班了”;;
周二) echo “终于过去一天了”;;
周三) echo “这周过去一半了,不错,哈哈”;;
周四) echo “下午休息一下”;;
周五) echo “明天可以过周末了,不错”;;
周六) echo “今天可以出去玩了”;;
周日) echo “好好睡一觉”;;
退出) echo “谢谢使用!” ; break ;;
esac
done
需要注意的是,echo和输出内容之间需要有空格。
运行效果为:
4. while循环
循环用于反复执行一系列的语句,正是循环语句,提高了我们的效率。最简单的循环就是while循环,也叫当型循环。
while语句的语法格式:
while 表达式
do
命令表
done
其中,“表达式”为循环控制条件,每次循环开始前都会检查,如果“表达式”的值为真,就执行do 和done之间的代码,执行完毕之后,会重新对表达式进行检测,如果为真,则继续进入循环体,如果为假,则跳出循环。
实例:输出1~N的平方值,N由用户输入
#!/bin/bash
echo “Please enter a number:”
read N
i =1
while [ $i –le $N ] //这里的中括号相当于test,并且需要注意的是中括号前后有空格
do
RESULT=`expr $i \* $i`
echo “$i------------$RESULT”
i=$(($i+1))
done
下面说一下while的嵌套,举个乘法表的例子:
#!/bin/bash
i=1
while [ $i –le 9 ]
do
j=1
while [ $j –le $i ]
do
RESULT=`expr $j \* $i`
echo –n “$j * $i =$RESULT ”
j=$(($j+1))
done
echo “”
i=$(($i+1))
done
注意:为了避免死循环,while语句中的循环体中必须有一条修改循环控制条件的代码。
5. for循环
Shell中的for循环和其他语言的for循环有些不同,是通过一个列表来控制循环的次数
语法结构:
for 变量 in 列表
do
命令表
done
列表通常由一系列由空格作为分隔符的字符串组成
列表中的字符串依次赋值给变量,每次赋值后执行命令表中的指令
循环结束之后,继续执行done后面的语句
例子:新建四个账号
#!/bin/bash
for name in TOM LILY JIM LUCY
do
useradd $name
done
6. until循环
until循环也称为直到型循环,while和until循环的区别在于,while循环在条件为真时继续执行循环,而until则是在条件为假时继续执行循环。
语法结构:
until 条件测试语句
do
命令表
done
实例:
#!/bin/bash
echo “enter your type”
read type
until [ $type = “quit” ]
do
echo “your type is $type”
echo “enter your type”
read type
done
7. break continue和exit
在流程控制语句中,break和continue是两个比较重要的语句,可以控制程序走向。
break语句可以直接跳出循环,continue语句可以跳过本次循环的其余代码而进行下一次的循环,而exit可以直接跳出正在执行的脚本
break的实例:
#!/bin/bash
echo “Please enter the number”
read N
for i in 1 2 3 4 5 6 7 8 9
do
if [ $i –eq $N ];then
echo “exit the for loop”
break
else
echo “this is the $i time”
fi
done
转载于:https://blog.51cto.com/xiaosu/531246
小苏的Shell编程笔记之五--Shell的控制结构相关推荐
- 小苏的Shell编程笔记之六--Shell中的函数
http://xiaosu.blog.51cto.com/2914416/531247 Shell函数类似于Shell脚本,里面存放了一系列的指令,不过Shell的函数存在于内存,而不是硬盘文件,所以 ...
- Linux Shell编程笔记10 Shell数组的补充
数组可以通过下标或值进行索引,如果不存在,则值为空.比如: #!/bin/bash arr[0]=hello echo ${arr[1]} # 输出空内容 使用@输出所有数组的内容,使用#和@输出元素 ...
- Linux高级专题详解--shell编程大全(shell变量,if语句,case语句,for循环,while循环,函数调用,数组,正则表达式,shell脚本三剑客--grep,sed,awk家族)
shell编程 初始shell 程序 语言 编程 ---------------------------------- 语言 自然语言:汉语.英语 计算机语言:c语言.c++.(java php py ...
- 小苏的Shell编程笔记之一
引言:个人感觉,Shell脚本对于Linux系统管理员太重要了,一条Shell语句可以达到几百条C语言代码的效果,尤其是当我们面对大型的集群的时候,Shell脚本更是把我们的工作效率提高了上千倍,听说 ...
- 小苏的Shell编程笔记之四--条件测试
1. Shell中的测试命令 test命令是Shell编程中条件判断最常用的测试命令.格式为: test 表达式 test命令也可以用中括号取代: [ 表达式 ] 需要注意的是:表达式和两个中括号之 ...
- linux+shell+func,Linux shell编程笔记总结
Linux Shell学习笔记简介 Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口.它是命令语言.命令解释程序及程序设计语言的统称.shell是用户和Linux内核之间的接 ...
- 高级shell编程笔记(第十二章 外部过滤器,程序和命令)
第十二章 外部过滤器,程序和命令 标准的UNIX命令使得脚本更加灵活.通过简单的编程结构把shell指令和系统命令结合起来,这才是脚本能力的所在. 12.1 基本命令 新手必须掌握的初级命令 ls 基 ...
- 高级shell编程笔记(第三十三章 杂项)
第三十三章 杂项 33.1 交互式和非交互式的shell和脚本 交互式的shell在tty终端从用户的输入中读取命令.另一方面,shell能在启动时读取启动文件,显示一个提示符并默认激活作业控制.用户 ...
- Linux bash shell 编程笔记(基础篇)
文章目录 Part.I Introduction Chap.I 传送门 Chap.II 基础知识 Chap.III 实操笔记 Part.II 程序设计控制结构 Chap.I if 分支程序 Chap. ...
最新文章
- Making Your Own iPhone Frameworks. In Xcode
- Linux下ipconfig分析及C语言实现
- c语言把文件导入链表,【求解答】c关于把文件数据放进链表,并将链表遍历
- 推荐系统笔记(评价指标及效果)
- html header文件格式类
- Sublime Text如何安装和卸载插件
- oracle回退脚本怎么写_短视频爆款文案怎么写?130个短视频爆款文案、脚本范例分享!...
- centos 环境变量_CentOS系统下为用户添加root权限
- 程序员“离职小技巧”
- Redis面试题汇总(附答案),面试突击专用
- 插件Sytrus合成器功能介绍
- MATLAB中基于GUI的噪声抑制imnoise,medfilt2命令
- FAT32文件系统格式详解
- 渗透测试PTES标准流程(超详细)
- python匹配邮箱_在Python中使用正则表达式同时匹配邮箱和电话并进行简单的分类...
- python自动注册邮箱_Python自动登录126邮箱的方法
- python教育数据挖掘_Python 数据分析 与 数据挖掘 (介绍篇)
- Java面试题(持续日更)
- 半世浮尘洗铅华,余半生为君温酒煮茶
- 通过yarn命令查看日志
热门文章
- #DAYU200#如何动态调节屏幕亮度
- 大数据必看经典书籍:大数据从入门到深入书籍推荐
- 证券市场基本法律法规
- 物流--配送管理(九)
- 2022北京眼睛健康展,北京眼镜展,北京近视矫正展,眼视光展
- 一套完整的SEO建站规则
- 【电商】电商后台设计—售后流程
- Python(4) 用Python破解有道翻译反爬虫机制
- java反射成员变量的值_Java反射如何修改private final成员变量值
- JS 保留两位小数,不足用0补齐;js 实现对数字保留两位小数时 不足两位 自动补0;JavaScript保留两位小数,自动补零