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 ...
随机推荐
- springBoot 整合 RabbitMQ 的坑
1.Consumer raised exception, processing can restart if the connection factory supports it. Exception ...
- 2016-2017 National Taiwan University World Final Team Selection Contest C - Crazy Dreamoon
题目:Statements Dreamoon likes algorithm competitions very much. But when he feels crazy because he ca ...
- windows平台kettle连接hbase的问题
我本机安装的环境是centos7,并在本机上安装了zookeeper,hadoop,hbase,hive等组件, 使用pdi7.1来连接hbase,把mysql表中的数据导出到hbase中去,没有问题 ...
- python3 驱动 PyMySQL
Python版本: 3.5.0 MySqlDB官网只支持Python3.4, 使用第三方库PyMysql连接Mysql数据库. https://pypi.python.org/pypi/PyMySQ ...
- ABP官方文档翻译 1.1 介绍
介绍 介绍 快速示例 其他 启动模板 如何使用 介绍 我们通常会根据不同的需求来创建不同的应用程序.但是对于一些通用相似的结构总是一遍又一遍的实现,至少在某种程度上是这样的.常见的通用模块如授权.验证 ...
- CSS Outline(轮廓)
CSS Outline(轮廓) 一.CSS 轮廓(outline) 轮廓(outline)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用. CSS outline 属性规定元素轮廓 ...
- 实现在vista和win7中使用管理员权限接收WM_DROPFILES(OnDropFiles())消息的方法(好像XP不支持这个函数)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #pragma once #ifndef WM_COPYGLOBALD ...
- shell编程学习笔记之sed编辑器
在shell编程中,大多数处理的都是文本文件.对文本文件进行处理除了使用交互式文本编辑器(vi[m],gedit......)也可以使用另外一类:流编辑器. 流编辑器:使用预定义的编辑规则来对文本进行 ...
- js 代码执行时间
<html> <head> </script> <script> var sTime=new Date().getTime(); alert(&qu ...
- Tomcat的配置,设置内存,获取用户IP
一.修改配置文件 tomcat配置文件路径/tomcat/bin/server.xml # shutdown指定终止Tomcat服务器运行时,发给Tomcat 服务器的shutdown监听端口的字符串 ...