while do done, until do done (不定循环)

  1. while [ condition ] <==中括号内的状态就是判断式
  2. do <==do 是回圈的开始!
  3. 程序段落
  4. done <==done 是回圈的结束
  1. until [ condition ]
  2. do
  3. 程序段落
  4. done
  1. [root@www scripts]# vi sh13.sh
  2. #!/bin/bash
  3. # Program:
  4. # Repeat question until user input correct answer.
  5. # History:
  6. # 2005/08/29 VBird First release
  7. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  8. export PATH
  9.  
  10. while [ "$yn" != "yes" -a "$yn" != "YES" ]
  11. do
  12. read -p "Please input yes/YES to stop this program: " yn
  13. done
  14. echo "OK! you input the correct answer."
  1. [root@www scripts]# vi sh13-2.sh
  2. #!/bin/bash
  3. # Program:
  4. # Repeat question until user input correct answer.
  5. # History:
  6. # 2005/08/29 VBird First release
  7. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  8. export PATH
  9.  
  10. until [ "$yn" == "yes" -o "$yn" == "YES" ]
  11. do
  12. read -p "Please input yes/YES to stop this program: " yn
  13. done
  14. echo "OK! you input the correct answer."
  1. [root@www scripts]# vi sh14.sh
  2. #!/bin/bash
  3. # Program:
  4. # Use loop to calculate "1+2+3+...+100" result.
  5. # History:
  6. # 2005/08/29 VBird First release
  7. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  8. export PATH
  9.  
  10. s=0 # 这是加总的数值变量
  11. i=0 # 这是累计的数值,亦即是 1, 2, 3....
  12. while [ "$i" != "100" ]
  13. do
  14. i=$(($i+1)) # 每次 i 都会添加 1
  15. s=$(($s+$i)) # 每次都会加总一次!
  16. done
  17. echo "The result of '1+2+3+...+100' is ==> $s"

for...do...done (固定回圈)

for 这种语法,则是『
已经知道要进行几次回圈』的状态!他的语法是:

  1. for var in con1 con2 con3 ...
  2. do
  3. 程序段
  4. done

以上面的例子来说,这个 $var 的变量内容在回圈工作时:

  1. 第一次回圈时, $var 的内容为 con1 ;
  2. 第二次回圈时, $var 的内容为 con2 ;
  3. 第三次回圈时, $var 的内容为 con3 ;
  4. ....

我们可以做个简单的练习。假设我有三种动物,分别是 dog, cat, elephant 三种, 我想每一行都输出这样:『There are dogs...』之类的字样,则可以:

  1. [root@www scripts]# vi sh15.sh
  2. #!/bin/bash
  3. # Program:
  4. # Using for .... loop to print 3 animals
  5. # History:
  6. # 2005/08/29 VBird First release
  7. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  8. export PATH
  9.  
  10. for animal in dog cat elephant
  11. do
  12. echo "There are ${animal}s.... "
  13. done
  1. [root@www scripts]# vi sh16.sh
  2. #!/bin/bash
  3. # Program
  4. # Use id, finger command to check system account's information.
  5. # History
  6. # 2009/02/18 VBird first release
  7. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  8. export PATH
  9. users=$(cut -d ':' -f1 /etc/passwd) # 撷取帐号名称
  10. for username in $users # 开始回圈进行!
  11. do
  12. id $username
  13. finger $username
  14. done
  1. [root@www scripts]# vi sh17.sh
  2. #!/bin/bash
  3. # Program
  4. # Use ping command to check the network's PC state.
  5. # History
  6. # 2009/02/18 VBird first release
  7. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  8. export PATH
  9. network="192.168.1" # 先定义一个网域的前面部分!
  10. for sitenu in $(seq 1 100) # seq 为 sequence(连续) 的缩写之意
  11. do
  12. # 底下的程序在取得 ping 的回传值是正确的还是失败的!
  13. ping -c 1 -w 1 ${network}.${sitenu} &> /dev/null && result=0 || result=1
  14. # 开始显示结果是正确的启动 (UP) 还是错误的没有连通 (DOWN)
  15. if [ "$result" == 0 ]; then
  16. echo "Server ${network}.${sitenu} is UP."
  17. else
  18. echo "Server ${network}.${sitenu} is DOWN."
  19. fi
  20. done

上面这一串命令运行之后就可以显示出 192.168.1.1~192.168.1.100 共 100 部主机目前是否能与你的机器连通! 如果你的网域与鸟哥所在的位置不同,则直接修改上头那个 network 的变量内容即可!其实这个范例的重点在 $(seq ..) 那个位置!那个 seq 是连续 (sequence) 的缩写之意!代表后面接的两个数值是一直连续的!

  1. [root@www scripts]# vi sh18.sh
  2. #!/bin/bash
  3. # Program:
  4. # User input dir name, I find the permission of files.
  5. # History:
  6. # 2005/08/29 VBird First release
  7. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  8. export PATH
  9.  
  10. # 1. 先看看这个目录是否存在啊?
  11. read -p "Please input a directory: " dir
  12. if [ "$dir" == "" -o ! -d "$dir" ]; then
  13. echo "The $dir is NOT exist in your system."
  14. exit 1
  15. fi
  16.  
  17. # 2. 开始测试文件罗~
  18. filelist=$(ls $dir) # 列出所有在该目录下的文件名称
  19. for filename in $filelist
  20. do
  21. perm=""
  22. test -r "$dir/$filename" && perm="$perm readable"
  23. test -w "$dir/$filename" && perm="$perm writable"
  24. test -x "$dir/$filename" && perm="$perm executable"
  25. echo "The file $dir/$filename's permission is $perm "
  26. done

for...do...done 的数值处理

  1. for (( 初始值; 限制值; 运行步阶 ))
  2. do
  3. 程序段
  4. done
  • 初始值:某个变量在回圈当中的起始值,直接以类似 i=1 配置好;
  • 限制值:当变量的值在这个限制值的范围内,就继续进行回圈。例如 i<=100;
  • 运行步阶:每作一次回圈时,变量的变化量。例如 i=i+1。

值得注意的是,在『运行步阶』的配置上,如果每次添加 1 ,则可以使用类似『i++』的方式,亦即是 i 每次回圈都会添加一的意思。

  1. [root@www scripts]# vi sh19.sh
  2. #!/bin/bash
  3. # Program:
  4. # Try do calculate 1+2+....+${your_input}
  5. # History:
  6. # 2005/08/29 VBird First release
  7. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  8. export PATH
  9.  
  10. read -p "Please input a number, I will count for 1+2+...+your_input: " nu
  11.  
  12. s=0
  13. for (( i=1; i<=$nu; i=i+1 ))
  14. do
  15. s=$(($s+$i))
  16. done
  17. echo "The result of '1+2+3+...+$nu' is ==> $s"

 

第十三章、学习 Shell Scripts 循环 (loop)的更多相关文章

  1. 第十三章、学习 Shell Scripts

    什么是 Shell scripts shell script (程序化脚本) :shell script 是针对 shell 所写的『脚本!』 shell script 是利用 shell 的功能所写 ...

  2. 鸟哥的Linux私房菜——第十六章:学习Shell Scripts

    视频链接:http://www.bilibili.com/video/av10565321/ 1. 什么是 Shell Script       (shell写的脚本)1.1 干嘛学习 shell s ...

  3. 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)

    第10章 vim程序编辑器 可以将vim看做vi的进阶版本,vim可以用颜色或底线等方式来显示出一些特殊的信息. 为何要学习vim?因为: a. 所有的 Unix Like 系统都会内建 vi 文书编 ...

  4. 《Linux命令行与shell脚本编程大全》 第二十三章 学习笔记

    第二十三章:使用数据库 MySQL数据库 MySQL客户端界面 mysql命令行参数 参数 描述 -A 禁用自动重新生成哈希表 -b 禁用 出错后的beep声 -B 不使用历史文件 -C 压缩客户端和 ...

  5. 第13章 学习shell script

    由于博客园中dollar符号有别的意义,所以文中的dollar符号使用¥表示 第一个script [root@localhost script]# cat -n sh01.sh #!/bin/bash ...

  6. 鸟哥的linux私房菜——第十三章学习(Linux 帐号管理与 ACLL 权限设置)

    第十三章.Linux 帐号管理与 ACLL 权限设置 1.0).使用者识别码: UID 与 GID UID :User ID GID :group ID [root@study ~]# ll -d / ...

  7. 第十三章、学习 Shell Scripts 条件判断式

    利用 if .... then 单层.简单条件判断式 if [ 条件判断式 ]; then 当条件判断式成立时,可以进行的命令工作内容: fi <==将 if 反过来写,就成为 fi !结束 i ...

  8. 第十三章、学习 Shell Scripts 善用判断式

    善用判断式 利用 test 命令的测试功能 我要检查 /dmtsai 是否存在时,使用: [root@www ~]# test -e /dmtsai [root@www ~]# test -e /dm ...

  9. 第十三章、学习 Shell Scripts 简单的 shell script 练习

    简单的 shell script 练习 简单范例 对谈式脚本:变量内容由使用者决定 [root@www scripts]# vi sh02.sh #!/bin/bash # Program: # Us ...

随机推荐

  1. hdu 4557 非诚勿扰

    水题…… 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #include<io ...

  2. Zookeeper实战之单机集群模式

    前一篇文章介绍了Zookeeper的单机模式的安装及应用,但是Zookeeper是为了解决分布式应用场景的,所以通常都会运行在集群模式下.今天由于手头机器不足,所以今天打算在一台机器上部署三个Zook ...

  3. ANDROID_MARS学习笔记_S01_005CheckBox

    一. 1.checkbox_layout.xml <?xml version="1.0" encoding="utf-8"?> <Linear ...

  4. 【HDOJ】3386 Final Kichiku “Lanlanshu”

    数位DP.需要注意的是需要特殊处理前导0,另外连续的==匹配,不要计重了,尽量贪心的匹配掉. /* 3886 */ #include <iostream> #include <sst ...

  5. Android开发UI之GridLayout的使用

    1.GridLayout 官网截图 GridLayout包含的属性如下: android:alignmentMode属性说明:当设置alignMargins,使视图的外边界之间进行校准.可以取以下值: ...

  6. 学习Java Web开发

    学习DreamWaveMX中文版的网页设计技术 HTML网页设计,这是最基本的.学习XML的一些基本知识.初步掌握一些JSCRIPT的应用. 学习JAVA语言. 这应该分成2次来进行: 第1次找一本国 ...

  7. poj1286Necklace of Beads(ploya定理)

    链接 这个东东是新知识 let's 从头学起吧 这篇文库讲的不错 至少把各种概念学了一遍 然后再看此题 共有两种类型的置换 一种是旋转之后相同算一种 一种是翻转之后相同算一种 对于旋转 共有N次置换 ...

  8. poj3225 线段树区间操作 (见鬼)

    细节处理实在太重要了. #include<cstdio> #include<cstring> #define MT 65533*4 #define Maxn MT*4 int ...

  9. BZOJ_3172_[TJOI2013]_单词_(AC自动机)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3172 \(n\)个单词组成一篇文章,求每个单词在文章中出现的次数. 分析 这道题很像BZOJ_ ...

  10. LeetCode Summary Ranges (统计有序数列范围)

    题意:给出个有序不重复数列(可能负数),用缩写法记录这个数列. 思路:找每个范围的起始和结束即可. class Solution { public: vector<string> summ ...