大纲:

1、逻辑判断

2、if流程控制语句

3、for循环控制语句

 

----------------------------------------------

在开始之前,先了解一下逻辑判断符号:

&& 与、|| 或、!

A && B  必须A,B同时成立,才能通过判断

---> 判断流程:先执行A判断其是否成立,若成立,则继续执行B,判断其是否成立

---> 若不成立,则直接结束,不再执行B

A || B  A、B有一个成立,即可通过判断

!A     若A不成立,则通过判断

----------------------------------------------

----------------------------------------------

在条件判断时,那面会比较数值或字符串,这是我们会用到一些参数和符号,如下

比较数值:

等于 ---> –eq

不等于 ---> –ne

小于 ---> –lt

大于 ---> –gt 

小于等于 ---> –le

大于等于 ---> –ge

一些英文单词:帮助记忆

equal等于、not equal、less than、great than

比较字符串:

= 等于、== 等于,同=、!= 不等于、> 大于、<小于、-z字符串为空、-n字符串非空null

注意:在[]结构中,<和>需要使用转义符号,如下图

实战1:判断当前系统语言环境

[root@xiaogan 02]# echo $LANG
en_US.UTF-8
[root@xiaogan 02]# echo $LANG | awk -F . '{print $1}'
en_US
[root@xiaogan 02]# vim lang.sh
[root@xiaogan 02]# sh -x lang.sh
++ echo en_US.UTF-8
++ awk -F . '{print $1}'
+ language=en_US
+ '[' en_US = en_US ']'
+ echo 'The Default Language is English.'
The Default Language is English.
[root@xiaogan 02]# cat lang.sh
#!/bin/bash
# judged if the System Default Language is English

language=$(echo $LANG | awk -F . '{print $1}')

if
    [ $language = 'en_US' ]
then echo "The Default Language is English."
else echo "You are wrong!"
fi

[root@xiaogan 02]#

----------------------------------------------

if流程控制语句

 

if语句有三种使用方式:

格式如下:

单分支:

if 条件判断语句

then 执行语句

fi

双分支:

if 条件判断语句

then 执行语句

else 执行语句

fi

多分支:

if 条件判断语句

then 执行语句

else 执行语句

fi

##################################
实战1:if单分支--->应用

源码如下:

#!/bin/bash
# if
# then
# fi

if [ ! -d /root/cdrom ]
then echo "/root/cdrom is not exist!"
fi

##################################
实战2:if双分支应用--->pinghost.sh
ping -c 3 -i 0.2 -w 3 192.168.0.1

-c 发送数据包个数

-i 数据包每次发送间隔时间,默认单位:秒(s)

-w 等待时间,超过返回失败

源码如下:

#!/bin/bash
# ping a given host and print the host status

ping -c 3 -i 0.2 -w 3 $1 >>/dev/null #-c count -i  -w wait
if [ $? -eq 0 ]
then echo "the host $1 is up."
else echo "the host $1 is down."
fi

##################################

实战3:if多分支应用--->判断数值区间 num_where.sh

源码如下:

#!/bin/bash
# judged the input score

read -p "input you score(0-100):" num

if [ $num -gt 85 ] && [ $num -lt 100 ]
then echo "Great! Good Good Study!!"
else echo "Day Day Up!"
fi

##################################

实战4:if嵌套使用

编写脚本,监控服务运行状态
启动失败后,保存日志,并重启服务,
再次失败,提示重启主机

源码如下:

#!/bin/bash

systemctl status $1 >>/var/log/ser.log

if [ $? -eq 0 ]
then echo "the $1 is running."
else echo "the $1 is dead."
    systemctl start $1 >>/dev/null
    if [ $? -eq 0 ]
    then echo "Reboot finish!"
        systemctl restart $1
    else echo "Warnning You to Reboot your server!"
    fi
fi

##################################
实战5:查询内核版本,并输出信息

源码如下;

#!/bin/bash
# search the major version of System, and print info.

prime=$(uname -r | awk -F . '{ print $1}')

if [ $prime -gt 2 ]
    then echo "The major version of System is $prime."
elif [ $prime -lt 1 ]
    then echo "The System is too low."
else echo "Failed!"
fi

----------------------------------------------

for循环控制语句

用法:

for 变量名 in 变量遍历列表

do

循环语句

done #循环结束表示

##################################

实战:用户管理(批量添加用户)

方法一:

运行环境:

输出结果:

批量删除用户:

方法一优化:

我们发现,在用方法一批量添加用户是,当用户不存在时,会有报错信息。查看运行过程如下:

sh –x for01_useradd.sh

在进入循环后,我们会首先查找/etc/passwd下,是否已存在用户$user,

但是,在运行过程中,我们发现,当这个用户不存在时user_a数值为空,判断条件就会少了一个比较值,而造成判断条件变为:[ = xiaogan ],这是系统就会报错!

为了避免系统报错,我们可使用-z 或 -n选项来判断user_a变量是否为空。

执行结果如下:

方法二:我们也可以采取另外一种方法,来批量添加用户

各方法源码如下:

方法一:

#useradd.sh

#!/bin/bash
userlist=$( cat user.list )

for user  in $userlist
do
user_a=$(grep -w "$user" /etc/passwd  | awk -F : '{print $1}' )
if
    [ $user_a = $user ]
then
    echo "The user $user is already exist."
else
    useradd $user #2>>/dev/null
    echo "User $user is added."
fi
done

###########

#userdel.sh

#!/bin/bash
userlist=$( cat user.list )

for user  in $userlist
do
    userdel -r $user 2>>/dev/null
    if [ $? = 0 ]
    then
        echo "The user $user is deleted!"
    fi
done

优化:

#useradd.sh

#!/bin/bash
userlist=$( cat user.list )

for user  in $userlist
do
user_a=$(grep -w "$user" /etc/passwd  | awk -F : '{print $1}' )
if
   # [ $user_a = $user ]
    [ ! $user_a -z ] && [ $user_a = $user ] 
    # To determine whether user_a is empty, not empty in to continue
then
    echo "The user $user is already exist."
else
    useradd $user #2>>/dev/null
    echo "User $user is added."
fi
done

方法二:

#new useradd.sh

#!/bin/bash
# Batch add user by scripts
# the new method

userlist=$( cat user.list )

for user in $userlist
do
    useradd $user 2>>/dev/null
    if
        [ $? -eq 0 ]
    then
        echo "123456" | passwd --stdin $user >> /dev/null
        echo "Useradd Success!"
    else
        echo "The user $user is already exists."
    fi
done

##################################

实战:ping.sh #批量测试IP地址是否连通

 
源码如下:

#!/bin/bash

ip_list=$( cat ip.list )

for ip in $ip_list
do
    ping -w 3 -c 3 -i 0.2 $ip >>/dev/null
    if [ $? -eq 0 ]
        then echo "the $ip is up."
    else echo "the $ip is down."
    fi
done

1-23-shell脚本之-if流程控制语句和for循环语句的使用的更多相关文章

  1. 『无为则无心』Python基础 — 14、Python流程控制语句(while循环语句)

    目录 1.什么是循环结构 2.while循环 (1)while循环的语法 (2)while循环的应用 3.while语句的死循环 4.break和continue 5.while循环嵌套 (1)应用场 ...

  2. 『无为则无心』Python基础 — 15、Python流程控制语句(for循环语句)

    目录 1.for循环语法 2.for循环中的break和continue 3.循环+else结构 (1)while...else (2)while...else退出循环的方式 (3)for...els ...

  3. shell脚本实现监控shell脚本的执行流程及变量的值

    这篇文章主要介绍了shell脚本实现监控shell脚本的执行流程及变量的值本文使用shell完成对执行过程中条件语句中的变量的变化的监控和整个程序的执行流程的观察功能,需要的朋友可以参考下 很多时候, ...

  4. Shell脚本编写4-----Shell 流程控制

    没啥好说的,直接从demo里看吧!(1) if 语句shell脚本的if语句格式如下: 判断输入两个参数的大小,执行结果如下 (2)for 循环for循环语法格式如下: 执行结果如下 (3)while ...

  5. Python基础2:流程控制语句 while / for循环

    [ while 循环 ] 如果要计算1+2+3,我们可以直接写表达式: >>> 1 + 2 + 3 要计算1+2+3+...+10,勉强也能写出来. 但是,要计算1+2+3+...+ ...

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

    转载请标明:http://www.cnblogs.com/winifred-tang94/ if条件语句语法: if [ 条件表达式 ] then 代码 else 代码 fi 注意:在上面的if条件语 ...

  7. JavaScript基础&实战(3)js中的流程控制语句、条件分支语句、for循环、while循环

    文章目录 1.流程控制语句 1.1 代码 1.2 测试结果 2.弹窗提示输入内容 2.1 代码 2.2 测试结果 3.条件分支语句 3.1 代码 3.2 测试结果 4.while和 do...whil ...

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

    大纲: 1.while循环控制语句 while实战---批量添加规则用户 while实战---猜价格游戏 2.case流程控制语句和exit退出 exit实战---返回值测试 case实战---智能解 ...

  9. Shell脚本[运算表达式,条件控制语句]

    #!/bin/bash #你值得收藏的四则表达式运算. val1=1 val2=1 val3=1 val4=1 val5=1 val6=1 val7=1 let val1++ ((val2++)) v ...

随机推荐

  1. Spring整合jdbc编程

    一.Spring对Jdbc的支持    Spring为了提供对Jdbc的支持,在Jdbc API的基础上封装了一套实现,以此建立一个 JDBC 存取框架. 作为 Spring JDBC 框架的核心, ...

  2. postgresql 建模文件 LDM 转成PDM 生成 SQL问题

    LDM 转成 PDM (Tool --- GPDM ) 生成 SQL,查看全部SQL 详细步骤见下图. 1.postgresql 没有 VARCHAR2 只有 VARCHAR. 2.LDM 生成 PD ...

  3. 读取、设置 php.ini配置文件(复制)

    1.ini_get()获取配置参数,ini_set()设置配置参数 复制代码 代码如下: <?phpecho ini_get('display_errors'); //1//动态修改php.in ...

  4. 一步一步学EF系列一【最简单的一个实例】

    整个文章我都会用最简单,最容易让人理解的方式给大家分享和共同学习.(由于live Writer不靠谱 又得补发一篇) 一.安装 Install-Package EntityFramework 二.简单 ...

  5. ruby中的可调用对象--proc和lamdba

    ruby中将块转变成对象的三种方法 ruby中的大部分东西都是对象,但是块不是.那么,如果你想存下来一个块,方便以后使用,你就需要一个对象.ruby中有三种方法,把块转换成可以利用的对象. Proc. ...

  6. Jenkins--持续集成服务器

    1.持续集成: 1.1概念 持续集成,Continuous integration ,简称CI. 集成:我们所有项目的代码都是托管在SVN服务器上.每个项目都要有若干个单元测试,并有一个所谓集成测试. ...

  7. spring boot 总结

    一.什么是SpringBoot 描述:Spring Boot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目.大多数SpringBoot项目只需要很少的配置文件.二.Spr ...

  8. Winter-1-B Sum 解题报告及测试数据

    Time Limit:500MS Memory Limit:32768KB Description ​Hey, welcome to HDOJ(Hangzhou Dianzi University O ...

  9. Atom中设置你的Snippet,atom技巧(二)

    我们经常需要对二维数组进行迭代,比如这样: for(int x = 0; x < width; x++){ for(int y = 0; y < height; y++){ screen[ ...

  10. Autowire

    Field userService in com.demo.web.Controller.HomeController required a single bean, but 2 were found ...