for mew歌词 shell_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

比较字符串:

= 等于、== 等于,同=、!= 不等于、> 大于、

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

实战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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值