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。直到后面没有可用的变量。

版权声明:本文为博主原创文章,未经博主允许不得转载。

最新文章

  1. SDWebImage源码解读之SDWebImageDownloaderOperation
  2. LeetCode&mdash;&mdash;Best Time to Buy and Sell Stock III (股票买卖时机问题3)
  3. Python 2.7.x 和 3.x 版本的重要区别
  4. (转载)Linux 套接字编程中的 5 个隐患
  5. [CrunchBang]Linux系统下必要的中文字体
  6. geotools解析SLD中的elsefilter为什么里面的filter无效
  7. PHP 性能分析与实验——性能的宏观分析
  8. iOS symbolicatecrash崩溃日志分析
  9. OpenResty(nginx扩展)实现防cc攻击
  10. C#判断奇偶数的函數
  11. poj 3415 Common Substrings(后缀数组+单调栈)
  12. jQuery之文本框得失焦点
  13. 新Android学习计划
  14. android——写xml
  15. nginx的内页跳转总结
  16. 每天一个Linux命令(12)--more命令
  17. Linux编程 10 (shell外部命令与内建命令,alias ,type命令)
  18. ORACLE---OCP培训
  19. FortiGate设置E-mail告警
  20. 性能测试十九:jmeter参数优化+排错

热门文章

  1. Linux下安装firefox的flash插件
  2. Linux nmon 监控工具使用
  3. ThinkPHP中PATHINFO模式优化
  4. Ubuntu下codeblocks汉化
  5. ORA-1653: unable to extend table SYS.AUD$
  6. javac。java版本切换
  7. 【F#】 入门代码
  8. I/O空间映射
  9. 高精度计算的类(BigInteger和BigDecimal)
  10. 笔记本电脑连接wifi有时候会自动断网提示有限的访问权限解决办法