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输出效果:
例子2:
for i in {1..10};do echo number is $i done输出效果:
例子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输出效果:
生成的密码:
格式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循环–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 #结束输出效果:
从while的格式可以看出,while更适合循环次数不确定的场合,因为只要是true,while就不会停止。这样就可以做一个死循环。
while true;do #true表示真, echo godai done执行这个脚本会一直输出gidai,直到我们强行结束这个脚本。
原创文章,作者:657188918,如若转载,请注明出处:http://www.178linux.com/85359