Linux Shell 基础之条件判断语句

发布于 2024-09-12 23:36:43 字数 5850 浏览 8 评论 0

Shell 条件判断式语句

按文件类型判断

测试选项作用
-b 文件判断该文件是否存在,并且是否为块设备文件
-c 文件判断该文件是否存在,并且是否为字符设备文件
-d 文件判断该文件是否存在,并且是否为目录文件
-e 文件判断该文件是否存在(存在为真)
-f 文件判断该文件是否存在,并且是否为普通文件
-L 文件判断该文件是否存在,并且是否为符号链接文件
-p 文件判断该文件是否存在,并且是否为管道文件
-s 文件判断该文件是否存在,并且是否为非空
-S 文件判断该文件是否存在,并且是否为套接字文件

两种判断格式

  • test -e /root/install.log
  • [ -e /root/install.log ]
  • [ -e /root/install.log ] && echo yes || echo no

按文件权限判断

测试选项作用
-r 文件判断该文件是否存在,并且是否该文件拥有读权限
-w 文件判断该文件是否存在,并且是否该文件拥有写权限
-x 文件判断该文件是否存在,并且是否该文件拥有执行权限
-u 文件判断该文件是否存在,并且是否该文件拥有 SUID 权限
-g 文件判断该文件是否存在,并且是否该文件拥有 SGID 权限
-k 文件判断该文件是否存在,并且是否该文件拥有 SBit 权限

两个文件之间的比较

测试选项作用
文件 1 -nt 文件 2判断文件 1 的修改时间是否比文件 2 的新
文件 1 -ot 文件 2判断文件 1 的修改时间是否比文件 2 的旧
文件 1 -ef 文件 2判断文件 1 是否和文件 2 的 Inode 号一致,可以理解为两个文件是否为同一个文件,这个判断用于硬链接判断是很好的方法

例子

# 创建一个硬链接
ln /root/student.txt/tmp/stu.txt

# 测试
[/root/student.txt -ef /tmp/stu.txt] && echo "yes" || echo "no"

两个整数之间的比较

测试选项作用
整数 1 -eq 整数 2判断整数 1 是否和整数 2 相等
整数 1 -ne 整数 2判断整数 1 是否和整数 2 不相等
整数 1 -gt 整数 2判断整数 1 是否大于整数 2
整数 1 -lt 整数 2判断整数 1 是否小于整数 2
整数 1 -ge 整数 2判断整数 1 是否大于等于整数 2
整数 1 -le 整数 2判断整数 1 是否小于等于整数 2

例子

[ 23 -ge 22 ] && echo "yes" || echo "no"
[ 23 -le 22 ] && echo "yes" || echo "no"

字符串的判断

测试选项作用
-z判断字符串是否为空
-n判断字符串是否为非空
字符串 1==字符串 2判断字符串 1 是否和字符串 2 相等
字符串 1!=字符串 2判断字符串 1 是否和字符串 2 不相等

例子

# 给 name 变量赋值
name=fengj

# 判断 name 变量是否为空
[ -z "$name" ] && echo "yes" || echo "no"

# 给变量 aa 和变量 bb 赋值
aa=11
bb=22

# 判断两个变量的值是否相等
[ "$aa" == "$bb" ] && echo yes || echo no

多重条件判断

测试选项作用
判断 1 -a 判断 2逻辑与,判断 1 和判断 2 都成立,最终的结果才为真
判断 1 -o 判断 2逻辑或,判断 1 和判断 2 有一个成立,最终的结果就为真
! 判断逻辑非,使原始的判断式取反

例子

# 给变量 aa 赋值
aa=11

# 判断变量 aa 是否有值,同时判断变量 aa 是否大于 23
[ -n "$aa" -a "$aa" -gt 23 ] && echo "yes" || echo "no"

Shell 单分支 if 语句

概述

如何 "背" 程序

  1. 抄写目标程序并能正确运行
  2. 为目标程序补全注释
  3. 删掉注释,为代码重新加注释
  4. 删除代码,看注释写代码
  5. 删除注释和代码,从头开始写

单分支 if 语句

语法支持

if [ 条件判断式 ];then
  程序
fi

if [ 条件判断式 ]
  then
  程序
fi

例子 1:判断登录的用户是否为 root

#!/bin/bash

test=$(env|grep "USER" |cut -d "=" -f2)

if [ "$test" == root ]
  then
  echo "Current user is root."
fi

单分支 if 语句例子:判断分区使用率

#!/bin/bash

# 统计根分区使用率,把根分区使用率作为变量值赋予变量 rate
rate=$(df -h | grep "/dev/disk1" | awk '{print $5}' | cut -d "%" -f 1)

if [ $rate -ge 70 ]
then
  echo "Warning! /dev/disk1 is full!!"
fi

Shell 双分支 if 语句

语法支持

if [ 条件判断式 ]
  then
    条件成立时,执行的程序
  else
    条件不成立时,执行的另一个程序
fi

双分支 if 语句例子:判断输入的是否是一个目录

#!/bin/bash

read -t 30 -p "Please input a dir:" dir

if [ -d "$dir" ]
then
  echo "is a Dir"
else
  echo "is not a Dir"
fi

双分支 if 语句例子:判断 Apache 服务是否启动

#!/bin/bash

# 列出所有进程,选取 httpd 进程,反选 grep
test=$(ps aux | grep httpd | grep -v grep)

if [ -n "$test" ]
  then
    echo "$(date) httpd is ok!" >> /tmp/autostart-acc.log
  else
    sudo apachectl restart  &> /dev/null
    echo "$(date) restart httpd !!" >> /tmp/autostart-err.log
fi

Shell 多分支 if 语句

语言支持:

if [ 条件判断式 1 ]
  then
    条件成立 1 时,执行的程序
elif [ 条件判断式 2 ]
  then
    条件成立 2 时,执行的程序
else
    条件不成立时,执行的另一个程序
fi

多分支 if 语句例子:判断用户输入的是什么文件

#!/bin/bash
# 判断用户输出的是什么文件

# 接受键盘的输入,并赋予变量 file
read -p "Please input a filename:" file

# 判断变量是否为空
if [ -z "$file" ]
then
  echo "Error,Please input a filename"
  exit 1
# 判断 file 的值是否存在
elif [ ! -e "$file" ]
then
  echo "Your input is not a file!"
  exit 2
# 判断 file 的值是否为普通文件
elif [ -f "$file" ]
then
  echo "$file is a regulare file!"
# 判断 file 的值是否为目录文件
then
  echo "$file is a directory!"
else
  echo "$file is an other file!"

Shell 多分支 case 语句

语法支持

case $变量名 in
  "值 1")
    如果变量的值等于值 1,则执行程序 1
  ;;
  "值 2")
    如果变量的值等于值 2,则执行程序 2
  ;;
  *)
    如果变量的值都不是以上的值,则执行此程序
  ;;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

只为一人

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

謌踐踏愛綪

文章 0 评论 0

开始看清了

文章 0 评论 0

高速公鹿

文章 0 评论 0

alipaysp_PLnULTzf66

文章 0 评论 0

热情消退

文章 0 评论 0

白色月光

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文