Shell选择结构

一、条件判断

格式1:test  条件表达式
格式2:[条件表达式]
格式3:[[条件表达式]]
-e 是否存在,不管是文件还是目录,只要存在,条件就成立。
-f 是否为普通文件
-d 是否为目录
-S socket
-p pipe
-c character
-b black
-L 软link
-s 是否文件不为空
-r 当前用户对其是否可读
-w 当前用户对其是否可写
-x 当前用户对其是否可执行
-u 是否有suid
-g 是否有sgid
-k 是否有t位

[root@localhost ~]# test -e file1.txt;echo $?  #第一种格式
0
[root@localhost ~]# test -e file2.txt;echo $?
1
[root@localhost ~]# [ -e file1.txt ];echo $?   #第二种格式
0
[root@localhost ~]# [ -e file2.txt ];echo $?
1
[root@localhost ~]# [[ -e file1.txt ]]; echo $?   #第二种格式
0
[root@localhost ~]# [[ -e file2.txt ]]; echo $?
1

两个文件的比较判断
test file1  -nt  file2  比较file1是否比file2新
test file1  -ot  file2  比较file1是否比file2旧
test file1  -ef  file2  比较是否为同一个文件,或者用于判断硬链接,是否指向同一个inode

整数之间的判断
-eq  相等
-ne  不等
-gt  大于
-lt  小于
-ge  大于等于
-le  小于等于

字符串之间的判断
-z  是否为空字符串
-n  是否为非空字符串

多重条件判断
[root@localhost ~]# [ 1 -eq 1 ] && echo hello  #当&&前条件判断为真,才执行后面的
hello
[root@localhost ~]# [ 1 -eq 2 ] && echo hello  # &&前为假,相当于短路
[root@localhost ~]# [ 1 -eq 2 ] || echo hello
hello
[root@localhost ~]# [ 1 -eq 1 ] || echo hello

二、实例

1、判断一个IP是否互通
#!/bin/bash
#提示用户输入ip
read -p "INPUT IP:" IP
ping $IP -c4 &>/dev/null
if [ $? -eq 0 ];then

   echo "OK!"

else

   echo "NO!"

fi
或者
#!/bin/bash
ping $1 -c4 &>/dev/null
if [ $? -eq 0 ];then

   echo "OK!"

else

   echo "NO!"

fi
或者
#!/bin/bash
if [ $# -ne 1 ];then
   echo "usage:./ping.sh IP" && exit
fi
ping $1 -c4 &>/dev/null && echo "OK!" || echo "NO!"

2、判断一个进程是否存在
#!/bin/bash
read -p "INPUT Process:" process
pidof $process &>/dev/null
if [ $? -eq 0 ];then

   echo "$process OK"

else
   echo "$process NO"

fi

3、判断一个web服务是否正常
#!/bin/bash
wget http://www.baidu.com &>/dev/null
[ $? -eq 0 ] &&  rm -f /root/index.*  &&  echo "OK!"  ||  echo "NO!" 

4、判断用户是否存在
#!/bin/bash
read -p "INPUT USER:" user
id $user &>/dev/null
[ $? -eq 0 ] && echo "OK!" || echo "NO!"

5、判断一个服务是否安装,如未安装则进行安装
#!/bin/bash
read -p "请输入服务名:" name
rpm -qa|grep $name &>/dev/null
if [ $? -eq 0 ];then
   echo "$name 已安装。"
else
   yum install -y vsftpd &>/dev/null
   echo "$name服务安装中。。。"
   [ $? -eq 0 ] && echo "安装成功" || echo "安装失败" 
fi

6、判断内核主版本是否等于2,次版本是否大于6
#!/bin/bash
kernal=`uname -r`
var1=`echo $kernal|cut -d. -f1`
var2=`echo $kernal|cut -d. -f2`
[[ $var1 -eq 2 && $var2 -ge 6 ]] && echo "kernal yes!" || echo "kernal no!"

7、判断vsftpd服务启动没,如果启动则输出端口和pid号
#!/bin/bash
systemctl status vsftpd &>/dev/null
if [ $? -eq 0 ];then
        port=`netstat -tlunp|grep vsftpd|cut -d: -f4|cut -d' ' -f1`
        pid=`pidof vsftpd`
        echo -e "服务已启动,port:$port,pid:$pid"

   else
        systemctl start vsftpd &>/dev/null
        port=`netstat -tlunp|grep vsftpd|cut -d: -f4|cut -d' ' -f1`
        pid=`pidof vsftpd`
        echo -e "服务已启动,port:$port,pid:$pid"
fi

相关推荐

  1. Shell选择结构

    2024-07-10 20:44:06       14 阅读
  2. 【数据结构选择排序

    2024-07-10 20:44:06       20 阅读
  3. REACT选择状态结构

    2024-07-10 20:44:06       18 阅读
  4. shell_结束进程脚本

    2024-07-10 20:44:06       19 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 20:44:06       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 20:44:06       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 20:44:06       4 阅读
  4. Python语言-面向对象

    2024-07-10 20:44:06       7 阅读

热门阅读

  1. Poincaré图和SD2计算参考

    2024-07-10 20:44:06       10 阅读
  2. C#控件总结

    2024-07-10 20:44:06       9 阅读
  3. STM32(一):安装环境

    2024-07-10 20:44:06       10 阅读
  4. 数据中台真的适合你的企业吗?

    2024-07-10 20:44:06       9 阅读
  5. [AIGC] ClickHouse的表引擎介绍

    2024-07-10 20:44:06       13 阅读
  6. go 函数

    2024-07-10 20:44:06       11 阅读
  7. 玩转springboot之springboot项目监测

    2024-07-10 20:44:06       10 阅读
  8. 【LeetCode】每日一题:跳跃游戏 II

    2024-07-10 20:44:06       10 阅读
  9. Python面试题: 如何在 Python 中实现一个线程池?

    2024-07-10 20:44:06       13 阅读
  10. js时间转成xx前

    2024-07-10 20:44:06       10 阅读
  11. stm32基本定时器

    2024-07-10 20:44:06       9 阅读