shell脚本

###课程目标:

一、for循环

1. 语法结构

1.1 列表循环

列表for循环:用于将一组命令执行已知的次数,下面给出了for循环语句的基本格式:

语法结构举例说明:

 

 

1.2 不带列表循环

不带列表的for循环执行时由用户指定参数和参数的个数,下面给出了不带列表的for循环的基本格式:

语法结构举例说明:

 

1.3 类C风格的for循环

语法结构举例说明:

2. 示例说明

demo1:计算1到100的奇数之和,方法不止一种

循环控制: continue:继续。表示循环体内下面的代码不执行,重新开始下一次循环 break:打断。马上停止执行本次循环,执行循环体后面的代码 exit:表示直接跳出程序

demo2:输入一个正整数,判断是否为质数(素数) 质数:只能被1和它本身整除的数叫质数。 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

demo3:批量加5个新用户,以u1到u5命名,并统一加一个新组,组名为class,统一改密码为123

3. 课堂练习:

1、批量新建5个用户stu1~stu5,要求这几个用户的家目录都在/rhome.提示:需要判断该目录是否存在

2、写一个脚本,局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里(如果例举整个网段的254个IP花的时间比较长,可以只分类10个ip192.168.1.10~20) 这只是一个局域网内机器检查通讯的一个思路。

3、输入一个年份,判断是否是润年(能被4整除但不能被100整除,或能被400整除的年份即为闰年。)

 

二、until循环

条件为真就退出循环;条件为假就死循环

示例1:使用until打印1-5

示例2:使用until批量创建用户,用户user01~user03,并且家目录为/rhome/user01...

三、while循环

条件为真就进入死循环;条件为假就退出循环

 

示例:

写一个30秒同步一次时间同步服务器10.1.1.1的脚本,如果同步失败,则进行邮件报警,每次失败都报警;同步成功,也进行邮件通知,但是成功100次才通知一次。

总结:

用至少三种方法打印1~5和5-1

 

四、随机数

应用案例:

  1. 写一个脚本,产生一个phonenum.txt文件,随机产生以139开头的手机号1000个,每个一行。
  1. 在上面的1000个手机号里抽奖5个幸运观众,显示出这5个幸运观众。但只显示头3个数和尾号的4个数,中间的都用*代替

思路:

  1. 批量创建5个用户,每个用户的密码为一个随机数

思路:

五、嵌套循环

一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。在外部循环的每次执行过程中都会触发内部循环,直至内部完成一次循环,才接着执行下一次的外部循环。for循环、while循环和until循环可以相互嵌套。

demo1:打印如下图案

 

demo2:打印如下图案

 

课堂练习:打印九九乘法表(三种方法)

六、总结

1.变量定义

2. 循环语句

3. 影响shell程序的内置命令

 

七、综合案例

1. 实战案例1:

写一个脚本,将跳板机上yunwei用户的公钥推送到局域网内可以ping通的所有机器上

10.1.1.1~10.1.1.254

2. 实战案例2:

写一个脚本,统计web服务的不同连接状态个数

 

作业:

1、将/etc/passwd里的用户名分类,分为管理员用户,系统用户,普通用户。 2、写一个倒计时脚本,要求显示离2018年6月18日(端午节)的凌晨0点,还有多少天,多少时,多少分,多少秒。 3、写一个脚本把一个目录内的所有空文件都删除,最后输出删除的文件的个数。