shell编程基础(5)---循环指令
while类型的循环
while类型的循环是不定循环的一种,每一次循环都会验证给出的循环条件,判断是否要进行下一次循环。linux中while循环的写法和c语言中很想,但是条件给出的方式有些区别。
首先是《鸟哥私房菜》书中给出的写法
while [ "$yn" != 0 -a "$yn" != 1 ]
do
read -p "please type in your answer " yn
done
echo "the answer is yes"
表示输入0或者1则显示yes。其中while的判断条件是[]中的内容。-a表示与判断。这里同样可以写成
while [ "$yn" != 0 ] && [ "$yn" != 1]
效果和作用是一样的。这里需要注意的是变量yn 不需要提前声明,直接可以出现在循环体里,此外在比较时需要用"" 把变量引起来,并在变量前加上$,否则会提示[] 内的符号错误。如果是和字符串比对,比对的字符串也需要在"" 内。例如
while [ "$yn" != "yse"]
除了while循环之外还有一个和while循环类似的,称为until循环,顾名思义,until循环代表条件不满足时执行循环体,条件满足则退出循环体
用until 循环实现上面的内容可以写作
until [ "$yn" == 0 -o "$yn" ==1 ]
do
done
之前while循环中使用的是与,这里使用的是或。
在循环中的与或关系是要注意的
for循环数据处理
for循环是一种定循环,在给定循环次数的情况下执行循环体,当循环次数超出所规定的值,则退出循环体。《鸟哥私房菜》中给出了一个利用for循环来求取数字和的程序。
read -p "test in a num: " num
s=0
for ((i=0;i<=$num;i=i+1))
do
s=$((s+i))
done
echo "the sum of the array is ====> $s"
这段程序的作用是从键盘中读取一个数字,然后求取从1到这个数字的和。和c语言中不同,这里的for循环内容用了两个括号。出现两个括号的时候多半与数值运算有关。
值得注意的是s=$((s+i)) 这种写法,两层括号一个都不能少,如果少了一层则会提示No command + found所以在执行运算操作时,两层括号是必须的,并且在赋值符号前需要有变量值提取符号$,否则无法完成赋值。
for循环系统管理
linux下shell编程最重要的应用是管理系统,和c语言中不同,这里的for命令是可以用于在命令中循环。《鸟哥私房菜》的例子
######## loop in system #######
####### cxz ### 2015 5 13 #####
usename=$(cut -d ":" -f1 /etc/passwd)
for usr in $usename
do
id $usr
done
其中cut -d ":" -f1 是一种分割命令,作用是将后面的文件进行分割,分割符号是":" -f1 的作用是选取分割出来的域,也就是分割符前的第1个块。
这里的for循环用的是for var in var1 var2 var3... 的形式,表示将执行体里的变量依次代入var1 var2 var3。直到后面没有可用的变量。
版权声明:本文为博主原创文章,未经博主允许不得转载。
shell编程基础(5)---循环指令的更多相关文章
- 6-2 shell编程基础
shell编程基础 编程基础 Linus:Talk is cheap, show me the code 程序和编程风格 程序: 程序:算法+数据结构 数据:是程序的核心 算法:处理数据的方式 数据结 ...
- 【转】Shell编程基础篇-下
[转]Shell编程基础篇-下 1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 ...
- 【转】Shell编程基础篇-上
[转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...
- shell编程基础(转载)
Shell编程基础 原作者 Leal:请参阅页面底部的编者列表. 授权许可: 创作共享署名协议 GNU 自由文档许可证 注意:本文仍然在持续的修订之中,且错漏之处可能较多.如果能够阅读英语的话,可以考 ...
- 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!
http://blog.csdn.net/xiaominghimi/article/details/7603003 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区 ...
- Linux学习之二十一-shell编程基础
Shell编程基础 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这个应用程序提供了一个 ...
- 7-1 shell编程基础之二
shell编程基础之二 算数运算 bash中的算术运算:help let +, -, *, /, %取模(取余), **(乘方),乘法符号有些场景中需要转义 实现算术运算: (1) let var=算 ...
- shell编程基础(二): shell脚本语法之分支语句和循环语句
一.分支语句 1.条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Status为1(注意与 ...
- 基于Linux系统的Shell编程-基础篇
1. Shell基础介绍 1.1 Shell编程的意义 为什么使用shell编程 节约时间 1.2 显示脚本执行过程 前面有+表示执行过的命令的 前面没有东西,表示输出到屏幕上的内容. [root@C ...
随机推荐
- 无法访问Fedora的samba共享
配置好samba服务后,却发现windows无法访问.经过多次试验与fedora的防火墙有关系. 关闭防火墙: #service iptables stop 或清空规则: #iptables -F w ...
- 2014年互联网IT待遇(包括国内民企、外企、金融机构)
一.民企 1. 百度 13k*14.6,special 14~17k*14.6 开发类 13K*14.6 (2014) 测试类.前端类 12K*14.6 (2014) 2. 腾讯 11.5k*16,s ...
- 第六周 N题
Description As Harry Potter series is over, Harry has no job. Since he wants to make quick money, (h ...
- swap分区添加
首先你需要使用命令:dd 来创建一个swapfile,然后你需要使用mkswap命令在设备或者文件中创建一个Linux swap分区a) 使用root用户登陆b) 使用下面的命令创建一个2G的 Swa ...
- VS2010调试入门指南
1 导言 在软件开发周期中,测试和修正缺陷(defect,defect与bug的区别:Bug是缺陷的一种表现形式,而一个缺陷是可以引起多种Bug的)的时间远多于写代码的时间.通常,debug是指发现缺 ...
- 在iOS App的图标上显示版本信息
最近读到一篇文章(http://www.merowing.info/2013/03/overlaying-application-version-on-top-of-your-icon/)介绍了一种非 ...
- 从零开始学ios开发(六):IOS控件(3),Segmented Control、Switch
这次的学习还是基于上一个项目继续进行(你也可以新建一个项目)学习Segmented Control和Switch. Segmented Control Switch Segmented Control ...
- QQ群里收集的外企iOS开发的笔试题
一组外企iOS开发的笔试题,您能回答出来吗?从群里收集来的. 1 why can't NSArray contain NSInteger Instance? with which extra step ...
- AJAX请求遭遇未登录和Session失效的解决方案
使用技术:HTML + Servlet + Filter + jQuery 一般来说我们的项目都有登录过滤器,一般请求足以搞定.但是AJAX却是例外的,所以解决方法是设置响应为session失效. 一 ...
- cocos2dx中的设计分辨率与屏幕适配策略
1.首先明确几个概念: 设计分辨率:designResolution,即资源图片的设计尺寸,即美工给你的资源图片的大小,比如(641*964) 屏幕分辨率:又叫帧的大小,glview->setF ...