1-23-shell脚本之-if流程控制语句和for循环语句的使用
大纲:
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循环语句的使用的更多相关文章
- 『无为则无心』Python基础 — 14、Python流程控制语句(while循环语句)
目录 1.什么是循环结构 2.while循环 (1)while循环的语法 (2)while循环的应用 3.while语句的死循环 4.break和continue 5.while循环嵌套 (1)应用场 ...
- 『无为则无心』Python基础 — 15、Python流程控制语句(for循环语句)
目录 1.for循环语法 2.for循环中的break和continue 3.循环+else结构 (1)while...else (2)while...else退出循环的方式 (3)for...els ...
- shell脚本实现监控shell脚本的执行流程及变量的值
这篇文章主要介绍了shell脚本实现监控shell脚本的执行流程及变量的值本文使用shell完成对执行过程中条件语句中的变量的变化的监控和整个程序的执行流程的观察功能,需要的朋友可以参考下 很多时候, ...
- Shell脚本编写4-----Shell 流程控制
没啥好说的,直接从demo里看吧!(1) if 语句shell脚本的if语句格式如下: 判断输入两个参数的大小,执行结果如下 (2)for 循环for循环语法格式如下: 执行结果如下 (3)while ...
- Python基础2:流程控制语句 while / for循环
[ while 循环 ] 如果要计算1+2+3,我们可以直接写表达式: >>> 1 + 2 + 3 要计算1+2+3+...+10,勉强也能写出来. 但是,要计算1+2+3+...+ ...
- 在shell脚本中进行条件控制以及使用循环
转载请标明:http://www.cnblogs.com/winifred-tang94/ if条件语句语法: if [ 条件表达式 ] then 代码 else 代码 fi 注意:在上面的if条件语 ...
- JavaScript基础&实战(3)js中的流程控制语句、条件分支语句、for循环、while循环
文章目录 1.流程控制语句 1.1 代码 1.2 测试结果 2.弹窗提示输入内容 2.1 代码 2.2 测试结果 3.条件分支语句 3.1 代码 3.2 测试结果 4.while和 do...whil ...
- 1-24-case流程控制和while循环语句的使用
大纲: 1.while循环控制语句 while实战---批量添加规则用户 while实战---猜价格游戏 2.case流程控制语句和exit退出 exit实战---返回值测试 case实战---智能解 ...
- Shell脚本[运算表达式,条件控制语句]
#!/bin/bash #你值得收藏的四则表达式运算. val1=1 val2=1 val3=1 val4=1 val5=1 val6=1 val7=1 let val1++ ((val2++)) v ...
随机推荐
- YYModel源代码阅读--基础知识
这段时间因为工作需要,阅读了YYModel这个开源框架,至于它能做什么,最直白的讲述就是JSON与Model之间的相互转化. 源代码在Github,大家可以自行git clone或者download. ...
- session、cookie、token
各自应用场景考虑session.token.cookie是不是有各自的应用场景,比如传统项目适合用session和cookie单页应用适合用token分布式适合用token等等 token如果非要选择 ...
- fir.im 测试包下载工具--FIRReader 的图文介绍
fir.im 是一个供开发者上传测试包(也可以是企业的正式包)的网站.该网站提供了接口访问应用资源.下面要介绍的这个应用对接了这些接口,供用户方便下载应用. 先来看下应用截图吧! 主要有以下功能点:1 ...
- iOS开发之AFNetworking网络编程
众所周知,苹果搞的一套框架NSContention发送请求与接收请求的方式十分繁琐.操作起来很不方便.不仅要做区分各种请求设置各种不同的参数,而且还要经常在多线程里操作,同时还要对请求与返回的数据做各 ...
- python3_json模块使用与字符编码问题
序列化:将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是json,xml. 反序列化:就是从存储区域(json,xml)读取反序列化对象的状态,重新创建该对象 Json:一种轻 ...
- Python3.x:logging模块对运行过程记录
Python3.x:logging模块对运行过程记录 示例: import logging # 设置 logger = logging.getLogger() #set loghandler #默认路 ...
- c语言数据类型字节长度
突然间就想到了long和int到底什么区别(发现有很多问题都是突然间想到的),然后百度.google各种查找,各种书籍:<C++ Primer>.<C程序设计语言>查看,终于明 ...
- Hive相关随笔
1).Hive中Select Top N的实现 Hive中使用 Order by + Limit 可以很容易地实现Select Top N. 但是在Hive中Order by只能使用1个Reduce, ...
- Win10m的前景到底在何方?
今天晚上就是build2016的微软开发者大会了,满怀着期待. 本人一直是一名微软的粉丝,我年纪小,刚开始接触电脑的时候是win98,那时候也没怎么玩过电脑,到后来经常接触电脑的时候,所有的电脑都是w ...
- Python学习札记(十二) Function3 函数参数一
参考:函数参数 Note 1.Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以 ...
