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

相关推荐

  • 程序包管理

    程序包 linux的程序包主要分为两类;二进制可执行安装包和源代码程序文件包     二进制应用程序的组成部分:     二进制文件、库文件、配置文件、帮助文件   查看二进制程序所依赖的库文件:     ldd&nbs…

    Linux干货 2016-05-30
  • 常用的MySQL数据库备份

    常用的MySQL数据库备份方式 前言 为什么需要备份数据? 数据的备份类型 MySQL备份数据的方式 备份需要考虑的问题 设计合适的备份策略 实战演练 使用cp进行备份 使用mysqldump+复制BINARY LOG备份 使用lvm2快照备份数据 使用Xtrabackup备份 总结 前言 我们试着想一想, 在生产环境中什么最重要?如果我们服务器的硬件坏了可…

    2015-06-13
  • 更改CentOS7 默认网卡eno16777736为eth0

        安装完CentOS7,它的默认网卡名为eno16777736 看着不爽!习惯了eth0的命名方式。 编辑 /etc/sysconfig/grub 在“GRUB_CMDLINE_LINUX”里添加net.ifnames=0 biosdevname=0 保存退出 如图: 然后执行 grub2-mkconfig -o…

    系统运维 2015-12-19
  • 基于heartbeat v2 crm实现基于nfs的mysql高可用集群

    前言 因heartbeat v1内置的资源管理器haresource功能比较简单,且不支持图形化管理,所以heartbeat v2不再支持haresource,转而使用更加强大的资源管理器crm进行集群管理。本文将讲解如何基于heartbeat v2 crm实现基于nfs的mysql高可用集群。 高可用实现 实验拓扑 实验环境 node1:172.16.10…

    Linux干货 2015-06-11
  • 学习宣言

     学习计划:参考N24学习时间与线路图,尽最大努力完成。 目标:学习好Linux,提升自我价值,找一份待遇好的工作。 宣言:每一次轻易的放弃,都是人生的一处败笔,为了梦想,加油!

    Linux资讯 2016-10-26
  • N25-第17周博客作业

    1、结合图形描述LVS的工作原理;     LVS (Linux Virtual Server)是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结…

    Linux干货 2017-05-21