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可以实现对分区的大小控制,控制用户在这个分区内使用空间的大小同时还可以对用户的文件个数实现控制。 在linux系统中其遵循文件分区来实现控制 磁盘的配额只针对单个分区来实现控制,不能对单块磁盘(硬盘)来实现控制的 【搭建试验环境 1】 怎样把某一个文件夹(/home)单独放到(迁移)一个独立的分区中…

    Linux干货 2017-04-24
  • vim、定时任务、脚本初步应用及详解

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;   ~]#cp  /etc/rc.d/rc.sysinit   /tmp   在末行模式下输入:%s@^[[:space:]]\+[^[:space:]]@#&@g     &:匹配模式找到的全部…

    2016-12-04
  • 用户管理权限命令总结

    用户 Linux操作系统是一个多用户操作系统,它允许多用户同时登录到系统上并使用资源。系统会根据账户来区分每个用户的文件,进程,任务和工作环境,使得每个用户工作都不受干扰。 用户分类 超级用户:(root,UID=0) 普通用户:(UID在500到60000) 伪用户:(UID在1到499) 系统和服务相关的:bin、daemon、shutdown等 进程相…

    Linux干货 2017-04-03
  • shell脚本基础

    shell脚本基础 基本介绍 Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高。换一种说法也就是,shell script是利用shell的功能所写的一个程序,这个程序是使用…

    2017-07-01
  • 运维自动化之系统安装

    自动化安装系统,cobbler的安装使用

    Linux干货 2018-01-15
  • 马哥教育首届IT技术博客大赛–复审阶段

    马哥教育首届IT博客大赛大众评审开始了 2016年马哥教育首届IT博客技术大赛,评委初审已结束,正式进入大众评审阶段。。。。 此次博客大赛,虽然因为准备时间比较仓促,举办经验略有不足(快去鄙视小编~&#x1f612;),但还是收到了10多位优秀的小伙伴共80篇博文(看看人家的劲头,这就是差距呀&#x1f613;)的参赛作品投递; 其中初审最高…

    Linux干货 2016-06-07