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 ...
随机推荐
- docker镜像上传到阿里云
目前上传本地镜像到网上有多种途径,一个是上传到hub上,一个是阿里云镜像仓库,还要其他服务器. 上传到hub上实在是太慢了,我的服务器用的是阿里云,所以选择上传到阿里云镜像仓库中. 前提条件:linu ...
- matlab手写神经网络实现识别手写数字
实验说明 一直想自己写一个神经网络来实现手写数字的识别,而不是套用别人的框架.恰巧前几天,有幸从同学那拿到5000张已经贴好标签的手写数字图片,于是我就尝试用matlab写一个网络. 实验数据:500 ...
- Mysql—(1)—
sql语句 sql是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言. 在使用它时,只需要发出“做什么”的命 ...
- maven 项目配置到tomcat不能正常启动
最近使用IntelliJ IDEA搭建公司项目,该项目是maven项目,加载jar和编译的时候没有任何异常,但是部署到tomcat上之后,就会出现如下异常: org.apache.catalina.L ...
- iOS 提升代码的安全性,可以做哪些措施???
希望能尽量防止别人 反编译你的代码: 目前苹果审核规则可知,苹果官方是不希望你使用代码混淆的...如果发现了你用代码混淆,甚至会勒令你修改你的代码,否则下一次审核会直接移除你的app…尤其是跑脚本的那 ...
- 使用CXF+Spring发布WebService,启动报错
使用CXF+Spring发布WebService,启动报错,日志如下: 五月 12, 2017 9:01:37 下午 org.apache.tomcat.util.digester.SetProper ...
- C++文件操作:打开文件和写入文件
如果程序的运行结果仅仅显示在屏幕上,当要再次查看结果时,必须将程序重新运行一遍:而且,这个结果也不能被保留. 如果希望程序的运行结果能够永久保留下来,供随时查阅或取用,则需要将其保存在文件中. 文件分 ...
- H5 播放视频常见bug及解决方案
本文摘自:本文来自“小时光茶社(Tech Teahouse)”公众号 原文:https://mp.weixin.qq.com/s/MM5ZwCiWLAeHalsNYMImnw 1. 自动播放问题 通过 ...
- fastdfs安装与配置
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件为载体的在线服务,如相 ...
- 《Java 程序设计》团队博客第十一周(第一次)
<Java 程序设计>团队博客第十一周(第一次) 团队项目 1.项目内容.目标 项目内容 本组的团队项目准备实现一个有关于大富翁有的游戏程序. 大富翁游戏,以经营权为主要的游戏方式,通过购 ...
