判断if--(shell脚本04)

1. if的基本语法结构

1.1 基本的几种用法

if [ condition ];then 
	command 
	command
fi
if [ condition ];then 
	command1
   else
	command2
fi
if [ condition1 ];then 
	command1
   elif [ condition2 ];then
	command2
   else 
     command3
fi
if [ condition1 ];then
		command1		
		if [ condition2 ];then
			command2
		fi
	else
		if [ condition3 ];then
			command3
		elif [ condition4 ];then
			command4
		else
			command5
		fi
fi

1.2 案例

1.2.1 案例1:当前主机是否与远程主机ping通

思路:
1.使用哪个命令ping -c1
2.参数控制,避免产生交互&>/dev/null
3.命令执行后的状态echo $? 0为真
脚本:

#!/bin/bash
# Name: ping.sh
# Path: /shell01/
# User: yq
#远程主机的ip地址 定义变量,用户自己实现read
read -p "请输入远程主机的ip:" IP

#使用ping 判断是否和远程主机互通
ping -c1 $IP &>/dev/null
if [ $? -eq 0 ];then
  echo "当前主机和远程的主机$IP是互通的"
else
  echo "当前主机和远程的主机$IP是no互通的"
fi

优化1: 不需提示输入ip 执行脚本的时候直接在后边加上ip

#!/bin/bash
# Name: ping.sh
# Path: /shell01/
# User: yq

#使用ping 判断是否和远程主机互通脚本后边跟参数
ping -c1 $1 &>/dev/null
if [ $? -eq 0 ];then
  echo "当前主机和远程的主机$1是互通的"
else
  echo "当前主机和远程的主机$1是no互通的"
fi

执行:

ping.sh 192.167.3.70

优化2:减少行数:

#!/bin/bash
# Name: ping.sh
# Path: /shell01/
# User: yq
#使用ping 判断是否和远程主机互通脚本后边跟参数
ping -c1 $1 &>/dev/null
[ $? -eq 0 ] &&   echo "当前主机和远程的主机$1是互通的" || echo "当前主机和远程的主机$1是no互通的"

优化3: 判断没有参数输入不可以执行,直接退出

#!/bin/bash
# Name: ping.sh
# Path: /shell01/
# User: yq
#使用ping 判断是否和远程主机互通脚本后边跟参数
if [ $# -ne 1 ];then
   echo "$0 remote_ip" && exit
fi
ping -c1 $1 &>/dev/null
[ $? -eq 0 ] &&   echo "当前主机和远程的主机$1是互通的" || echo "当前主机和远程的主机$1是no互通的"

1.2.2 案例2:判断一个进程是否存在

思路:
1.查看进程的相关命令
ps -ef
pgrep
ps auxf
pidof
2.根据命令的返回状态$?
3.脚本语言的实现
当然在使用pgrep 的时候,会存在你模糊查询的时候,需要注意,最好采用pidof直接查询进程的pid

#!/bin/bash
# name: pidof.sh
# path:/shell01/

#pidof $1 &>/dev/null
if [ $# -ne 1 ];then
   echo "输入错误" && exit 
else
  pidof $1 &>/dev/null
  if  [ $? -eq 0 ];then
   echo "$1进程存在"
  else
   echo "$1进程不存在"
  fi
fi

1.2.3 案例3:判断一个服务是否正常

#!/bin/bash
wget http://10.1.1.2 &>/dev/null
[ $? -eq 0 ] && echo "该web服务是正常的" && rm -f /shell/shell01/index.* || echo "该web服务异常请检查"

1.2.4 输入一个用户,用脚本判断该用户是否存在

read -p "请输入需要判断的用户名:" user
id $user &>/dev/null
test $? -eq 0 && echo "该$user存在" || echo "该$user不存在"

1.2.5 判断vsftpd软件包是否安装,如果没有则自动安装(yum源已配好)

#!/bin/bash
rpm -q vsftpd &> /dev/null
if [ $? -eq 0 ];then
        echo "vsftpd已经安装"
else
        echo "该软件包没有安装,正在安装...."
        yum install -y vsftpd &> /dev/null

        if [ $? -eq 0 ];then
                echo "vsftpd安装成功"
        else
                echo "vsftpd安装失败"
        fi
fi

判断当前内核主版本是否为2,且次版本是否大于等于6;如果都满足则输出当前内核版本

思路:
1. 先查看内核的版本号	uname -r
2. 先将内核的版本号保存到一个变量里,然后再根据需求截取出该变量的一部分:主版本和次版本
3. 根据需求进步判断


#!/bin/bash
kernel=`uname -r`
var1=`echo $kernel|cut -d. -f1`
var2=`echo $kernel|cut -d. -f2`
test $var1 -eq 2 -a $var2 -ge 6 && echo $kernel || echo "当前内核版本不符合要求"
或者
[ $var1 -eq 2 -a $var2 -ge 6 ] && echo $kernel || echo "当前内核版本不符合要求"
或者
[[ $var1 -eq 2 && $var2 -ge 6 ]] && echo $kernel || echo "当前内核版本不符合要求"

或者
#!/bin/bash
kernel=`uname -r`
test ${kernel:0:1} -eq 2 -a ${kernel:2:1} -ge 6 && echo $kernel || echo '不符合要求'

其他命令参考:
uname -r|grep ^2.[6-9] || echo '不符合要求'

判断ftp服务是否已启动,如果已启动输出以下信息:

参考1:
#!/bin/bash
service vsftpd status &>/dev/null
if [ $? -eq 0 ];then
	port=`netstat -tnltp|grep vsftpd|cut -d: -f2|cut -d' ' -f1`
	pid=`pgrep -l vsftpd|cut -d ' ' -f1`
	echo -e "vsftpd服务器已启动...\nvsftpd监听的端口是:$port\nvsftpd的进程PID是:$pid"
else
	service vsftpd start &>/dev/null
	port=`netstat -tnltp|grep vsftpd|cut -d: -f2|cut -d' ' -f1`
   pid=`pgrep -l vsftpd|cut -d ' ' -f1`
   echo -e "vsftpd服务器已启动...\nvsftpd监听的端口是:$port\nvsftpd的进程PID是:$pid"
fi


参考2:
[root@server shell02]# cat liufeng.sh 
#!/bin/bash
service $1 status
if [ $? -eq 0 ];then
        echo " '$1'服务器已启动..."
        a=$( netstat -tnulp | grep $1 )
        array=($a)
        echo "$1的监听端口是:$(echo ${array[3]} | cut -d: -f2) "
        echo "$1的进程ID为:$(echo ${array[6]}| cut -d/ -f1)"
else
        echo "$1进程未启动!"
fi

参考3:
vim /lt/2.sh
#! /bin/bash
duankou=`netstat -ntlp|grep vsftpd|cut -d: -f2|cut -d" " -f1`
pid=`pgrep -o vsftpd`

vim 1.sh
pgrep -l vsftpd >/dev/null
if [ $? -eq 0 ];then
        echo "vsftpd服务器已启动..."
        echo "vsftpd监听的端口是:$duankou"
        echo "vsftpd的进程PID是:$pid"
else
        echo "vsftpd服务器没启动"
        service vsftpd start
        source /lt/2.sh
fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长安有故里y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值