Shell脚本-循环基础

Shell脚本-循环基础

背景:

正在学习Shell脚本之循环,发现Shell的循环和其他编程语言大同小异,逻辑上都是相通的,但在使用格式上却有点不同,在学习完Shell循环后,将学习的心得体会记录下来,以备今后复习。

介绍:

什么是Shell脚本:

      shell script是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面,然后用正规表示法,管道命令以及数据流重导向等功能,以达到我们所想要的处理目的。

      shell script就像早期dos年代的.bat,将许多指令汇整写一起,让使用者很容易地就能够一个操作执行多个命令,而shell script还提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以shell来写程序,而不必使用类似C程序语言等传统程序编写的语法。

Shell–for循环

格式1:

格式:for name [in words …] ; do COMMANDS;done

其中for为关键字,表示下面是使用的for循环

name是循环时使用的名字,它代表被循环列表里的具体值。在循环体里,我们不知道系统循环到哪了,也就不知道具体值是什么,所以需要一个统一的名字来代表这个值,而这里的name就是代表这个值的,它的名字是可以自己随意取的,但是要避开使用一些系统关键字和保留字。

in words … 代表使用的循环列表,可以是一串字符也可以是数组,如for name in word1 word2 word3 …,其中in是关键字,如果后面有循环列表就需要使用in。

do COMMANDS :其中do是关键字,表示后面是循环执行的命令,COMMANDS代表命令集合,可以是多个命令

done代表循环结束

如果这些代码是写在一行的,需要用”;”来分开,如果是分行写可以不用加”;”,后面会有列子供参考。

例子1:

for i in zhangsan lisi wangwu;do
        echo your name is $i
done

输出效果:

Shell脚本-循环基础

例子2:

for i in {1..10};do
     echo number is $i
done

输出效果:

Shell脚本-循环基础

例子3:

 for i in `seq 10`;do #循环10次,seq 10命令表示1到10
          useradd user$i #添加用户
          echo user$i is created #提示用户添加
          password=`tr -dc 'a-zA-Z0-9' < /dev/urandom |  head -c 8` #随机生成8位数密码
          echo user$i:$password >> /root/user.log #将密码写入日志文件
          echo $password | passwd --stdin "user$i" &> /dev/null #为用户添加密码
  done #结束
  unset password #释放变量password

输出效果:

Shell脚本-循环基础

生成的密码:

Shell脚本-循环基础

格式2:

格式:for (( exp1; exp2; exp3 )); do COMMANDS; done

这个用法和C语言的for循环差不多,不过这里用两个()括起来

exp1表示循环的起始值

exp2表示循环执行的条件,满足条件则执行,不满足则退出循环

exp3表示循环成功执行后的操作

其他的和第一种格式是一样的

例子:

for ((i=0;i<10;i++));do
      echo number is $i
done

输出效果:

Shell脚本-循环基础

Shell循环–while

格式:

格式:while COMMANDS; do COMMANDS; done

其中while为关键字,表示后面使用while循环

COMMANDS表示循环执行条件,COMMANDS结果为true时执行循环,为false则退出循环

do COMMANDS 表示循环执行的命令集

done 表示循环结束

例子:

i=0 #初始化i
while [ $i -lt 10 ];do #当i 小于10时执行循环体里的命令
      echo $i #输出 i 的值
      let i++ # i+1
done #结束

输出效果:

Shell脚本-循环基础

从while的格式可以看出,while更适合循环次数不确定的场合,因为只要是true,while就不会停止。这样就可以做一个死循环。

while true;do #true表示真,
      echo godai
done

执行这个脚本会一直输出gidai,直到我们强行结束这个脚本。

原创文章,作者:657188918,如若转载,请注明出处:http://www.178linux.com/85359

(0)
657188918657188918
上一篇 2017-08-26 09:23
下一篇 2017-08-26 12:26

相关推荐

  • 系统管理和内核管理(二)之grub使用、编译安装内核

    系统管理和内核管理(二)之grub使用、编译安装内核   回顾CentOS 6启动流程: POST –> Boot Sequence(BIOS) –> Boot Loader –> Kernel(ramdisk) –> rootfs–> switchroot&…

    Linux干货 2016-09-15
  • 堡垒机-麒麟堡垒机动态口令使用手册

      一.管理员部分 1.在其它-licenses菜单查看动态口令许可是否打开,如果未打开联系厂商重新生成许可   2.找厂商生成密钥文件,密钥文件中包含令牌种子,在其它–动态令牌菜单将密钥文件导入即可看到所有的令牌种子,每个令牌可以绑定给多个用户     3.令牌绑定可以在 资源管理–…

    安全运维 2016-05-29
  • case条件判断语句

    条件判断: case语句     在shell编程中,对于多分支判断,用if 虽然也可以实现,但有些时候,写起来很麻烦,也不容易代码理解。这个时候,可以考虑case。 case 变量引用 in PAT1) 分支1 ;; PAT2) 分支2 ;; … *) 默认分支 ;; esac case语句结构特点如下:…

    Linux干货 2016-08-16
  • iptables介绍和使用

    iptables/netfilter:    Packets Filter Firewall:          包过滤型防火墙:  Firewall:隔离工具,工作于主机或网络的边缘处,对经由的报文根据预先定义的规则(识别标准)进行检测,对于能够被规则匹配到的报文实行…

    Linux干货 2017-04-29
  • 压缩和解压缩总结

                      压缩和解压缩的命令很多,今天总结如下: gzip  压缩比1–9  默认是6  压缩比越高  耗费CPU资源也多,文件比较小的话,不建议使用gzip压缩,因为使用gzip越压缩越大。…

    Linux干货 2017-04-17