shell脚本(二)--if流程控制语句和for循环语句的使用

理论部分:

1、在简单的脚本中各条语句按顺序执行,从而实现自动化的管理,

顺序单一执行太过机械化,不够“智能”,难以实现更加灵活的系统任务。

例如:批量安装软件包

100台机器 50台已安装 50台未安装

2、shell环境根据$?来判断是否执行成功,当返回值为0时代表执行成功。如果是非0则代表执行异常一般为1或者为1到127之间的整数。

3、常用的逻辑测试

&&:逻辑与,“并且而且”的意思 满足两个条件

||:逻辑或,“或者”的意思 满足两个条件中的一个

! : 逻辑否

逻辑与&&是指并且而且的意思,只有前后两个条件都成立时才会返回值为0(成立)否则就是非0(不成立)

逻辑与-实例

先进入到/usr目录在显示当前所在目录,如果cd没有进入目录后面的命令是不会执行的

逻辑或-实例

实战—1

我们通过逻辑表达判断一下两个变量的值

2、数值的比较

-eq:等于(Equal)

-ne:不等于(Not Equal)

-gt:大于(Greater Than)

-lt:小于(Lesser Than)  

-le:小于或等于(Lesser or Equal)

-ge:大于或等于(Greater or Equal)

格式 [ 数值1 操作符 数值2 ]

3.字符串比较

= 字符串内容相同

!= 字符串内容不同

-z 字符串内容为空

! 取反的意思.

实战1--

若要判断当前系统的语言环境,当发现不是en.US时输出提示信息“$LANG”

$LANG变量是定义当前系统的语言属于环境变量

取反就是不等于的意思

实战2—

-z为对于为赋值的变量进行测试

2-1-单分支if语句的格式

if 条件测试操作

then

命令序列

fi

单分支的结构非常简单,条件成立就执行then命令序列,条件不成立则fi结束

实战—1

2-2-双分支IF语句

双分支的选择结果,要求针对条件成立,条件不成立两种情况分别执行不同的操作

语法结构

if 条件测试操作

then(条件成立执行)

命令序列1

else(否则,条件不成立,则执行)

命令序列2

fi

实战1—

我们编写一个连通性测试脚本通过位置参数$1提供目标主机地址,然后根据ping检测结果给出相应提示

-c ping包的次数

-i ping包的间隔

-w 超时的时间间隔

脚本解释:如果if判断为0则接下来执行then输出目标主机up

如果不为0则执行else输出目标主机down

2-3-多分支if语句

由于if语句可以根据测试结果的成立,

不成立分别执行,所以可以嵌套使用,进行多次判断.

if 条件测试操作1

then

命令序列1

elif 条件测试2

then

命令序列2

else

命令序列3

fi

多分支if语句应用

1. 编写一个成绩分档脚本gradediv.sh根据输入不同的分数来区分优秀、合格、不合格三挡

vim gradediv.sh

首先判断是否大于85 小于 100 如果符合则输出优秀并结束判断

如果小于85 并且大于 60 为优秀 执行then 输出合格

否则 都执行else 其余的都是不合格继续

执行的结果

实战部分

1、编写脚本程序用于监视系统服务httpd的运行状态,要求如下

当服务状态失败时在"/var/log/httpderr.log"文件中记入日志信息。

自动将状态失败的httpd服务重新启动。若重启httpd服务失败,测尝试重新启动服务器主机

vim httpd.sh

查看 /var/log/httpderr.log

2、编写uname.sh脚本判断当前系统的内核主次版本若大于2.4则输出当前版本否则输出提示当前版本太低

过滤主版本号

过滤出次版本号

vim kernel.sh

执行:

3-1-for循环语句的结构

使用for循环语句时,需要指定一个变量及可能的取值列表。跟对不同的取值,执行相同的命令序列直到变量的值取完遍退出循环。取值列表称为for语句的执行条件

for语句执行的语法结构

for 变量名 in 取值列表

do

命令序列

done

其种 变量名可以自定义,do里面还可以嵌套多个if语句done结束循环

in乃是关键字,从哪里取值,多个取值之间使用空格隔开

实验环境:有些时候我们的系统需要多个用户的时候,并且用户名使用员工的拼音为用户名这是也可以使用for循环进行创建并设置初始密码

我们先从人事部取来员工的姓名列表将这个列定义为取值列表

我们这里模拟创建一个

这些用户就作为取值,都是一些厂家的名字.

vim users.txt

查看创建成功的用户

编辑一个脚本 添加用户vim adduser.sh

首先定义一个变量作为取值列表

将取值列表赋予变量user

嵌套一个if语句判断用户是否存在,如果存在则输出用户已存在,否则执行else的命令序列进行添加用户并且设置密码实现取值循环

if判断使用grep awk 过滤出/etc/passwd的第一个字段

使用user_a与取值列表进行比较如果等于则输出用户已存在,如果不等于则执行else的命令序列

执行脚本:sh –x adduser.sh

再次执行

输出了用户已存在,

若要删除刚刚创建的用户可以编写脚本

vim deluser.sh

执行:

好了这就是批量创建用户和批量删除用户

案例根据ip地址列表检测主机状态

建立一个ip地址取值列表

vim ip.txt

vim ping.sh

判断一下当前主机是否存活,如果存活 输出 host is up 否则输出 host is down

这就是简单的for循环语句的应用

原文地址:http://blog.51cto.com/rescue/2119775

时间: 2024-10-02 04:20:19

shell脚本(二)--if流程控制语句和for循环语句的使用的相关文章

1-23-shell脚本之-if流程控制语句和for循环语句的使用

大纲: 1.逻辑判断 2.if流程控制语句 3.for循环控制语句   ---------------------------------------------- 在开始之前,先了解一下逻辑判断符号: && 与.|| 或.! 非 A && B  必须A,B同时成立,才能通过判断 ---> 判断流程:先执行A判断其是否成立,若成立,则继续执行B,判断其是否成立 ---> 若不成立,则直接结束,不再执行B A || B  A.B有一个成立,即可通过判断 !A   

shell脚本中if流程控制语句的应用

上篇关于测试语句的使用规则及相关使用方法,如果仅仅孤立使用时很难有其用武之地,当然在shell脚本中其实不可能孤立存在的,只有与条件语句和控制语句等搭配使用才能使其功能得到最大限度的体现,因此在日常使用中,其功能不容小觑. 一.控制流程 if控制流程可分为但分支if语句和多分支if语句,其使用语和C语言中有很多相似之处,具体用法如下文所述. 1.1但分支if语句结构: 1.2基本语法     if 条件        或    if 条件:then   //分号表示两个命令写在一行并不相互影响,

shell脚本二

在shell脚本一 中,我讨论了shell脚本的语法规范,shell脚本的变量,以及shell脚本的测试语句. 仅仅懂得这些只能写简单的脚本,在简单的脚本中各条语句按顺序执行,从而实现自动化的管理,顺序单一执行太过机械化,不够“智能”,难以实现更加灵活的系统任务.甚至一个简单的场景:现有100台linux服务器,其中有50台安装过某软件,有50台没有安装过某软件.如果没有流程控制及循环方面的脚本知识,如此简单的问题,也变得非常低效.所以本文带你走进shell脚本的流程控制及循环的世界.  一.多

shell基础及流程控制语句之一while循环

前面写过if条件判断,一般在写shell脚本时可能会用到死循环这时就需要while语句了,它是做死循环最好的方法,在讲while循环之前需要讲文件测试,因为在写脚本时经常会用到. 文件测试: -e $file:判断是否存在如果存在则为真,不存在则为假 -f $file:判断是否存在并且为普通文件,存在为真,不存在为假 -d $file:判断是否存在并且为目录,存在为真不存在为假 -h $file:判断是否存在并且为符号链接文件(软连接),存在为真,不存在为假 -L $file:与-h一样不做解释

在shell脚本中进行条件控制以及使用循环

转载请标明:http://www.cnblogs.com/winifred-tang94/ if条件语句语法: if [ 条件表达式 ] then 代码 else 代码 fi 注意:在上面的if条件语句中,if和 [ 之间要有空格,而条件表达式和两边的 [ ] 都要有空格,条件表达式不能紧挨着 [ 和 ]. if条件表达式以fi结束. Eg. 结果出现了以下问题: 原因是因为开头在#!后还要有一个/,加上/后解释器错误没有了,代码如下: 可是仍然有没有那个文件或目录的错误.对于这个错误我觉得是e

shell 脚本,在调试时,FOR循环那行代码,总是出现错误syntax error near unexpected token do(转)

这种情况发生的原因是因为你所处理的文件换行符是dos格式的"\r\n" 可以使用cat -v 文件名 来查看换行符是否是,如果是上述的,则行结尾会是^m 需要转换成linux/unix格式的"\n" 具体转换办法就是转换换行符 可以用sed命令处理一下文件,命令如下: sed 's/\r//' 原文件 >转换后文件 sed 命令的参数中 "代表决定引用参数,不允许参数中的值让shell解释,s代表替换 /后面跟的是被替换的内容,后面的//代表替换后的

java se 流程控制语句 if与switch语句

流程控制语句if的用法为:第一种形式:if(布尔表达式){//待执行的代码}第二种形式:if(布尔表达式){//待执行的代码}else{//待执行的代码}第三种形式:if(布尔表达式){//待执行的代码}else if(布尔表达式){//待执行的代码}else if(布尔表达式){//待执行的代码}else{//待执行的代码} public class IfTest{ public static void main(String[] args) { int a = 3; int b = 2; i

1-24-case流程控制和while循环语句的使用

大纲: 1.while循环控制语句 while实战---批量添加规则用户 while实战---猜价格游戏 2.case流程控制语句和exit退出 exit实战---返回值测试 case实战---智能解压压缩包 case实战---配置nginx服务器 ###################################### 1.while循环控制语句 循环的意思就是让程序重复地执行某些语句; while循环就是循环结构的一种, 当事先不知道循环该执行多少次,就要用到while循环; 理解:在判

shell编程中的流程控制语句

1.条件选择:if语句 ①单分支         if 判断条件;then             条件为真的分支代码         fi ②双分支         if 判断条件; then               条件为真的分支代码         else               条件为假的分支代码         fi ③多分支          if 判断条件1; then                条件为真的分支代码          elif 判断条件2; then