当前位置: 首页 > article >正文

Linux_shell脚本if语句详细教程

前言

在 Linux Shell 脚本中,if 语句用于基于条件执行命令或代码块。它的基本语法结构如下:

if 条件; then
    # 如果条件为真时执行的代码
elif 另一个条件; then
    # 如果另一个条件为真时执行的代码
else
    # 如果所有条件都不成立时执行的代码
fi

一、if 语句中 &&、|| 和 ! 的使用方法

1、&& (逻辑与)

  • && 用于连接两个命令,当左边的命令成功(即返回值为0)时,右边的命令才会执行。
# 语法结构:
if 条件一 && 条件二; then
    echo "条件一和条件二都执行成功"
else
    echo "条件一或条件二有失败"
fi

逻辑:

  • 如果 条件一 成功(返回值为 0)且 条件二 也成功(返回值为 0),then 分支会执行。
  • 如果 条件一 失败(返回非 0),或者 条件二 失败(返回非 0),else 分支会执行。

这个规则是基于“与”运算符:只有两个条件都成功,then 才会执行。

# 场景示例:检查一个文件是否存在且可执行
#!/bin/bash

FILE="/home/user/file.sh"

# [ ] 写法
if [ -e "$FILE" ] && [ -x "$FILE" ]; then
    echo "[: 文件存在且可执行"
else
    echo "[: 文件不存在或不可执行"
fi

# [[ ]] 写法 
if [[ -e "$FILE" && -x "$FILE" ]]; then
    echo "[[: 文件存在且可执行"
else
    echo "[[: 文件不存在或不可执行"
fi

2、|| (逻辑或)

  • || 用于连接两个命令,当左边的命令失败(即返回值不为0)时,右边的命令才会执行
# 语法结构:
if 条件一 || 条件二; then
    echo "条件一或条件二执行成功"
else
    echo "条件一和条件二都执行失败"
fi

逻辑:

  • 如果 条件一 成功(返回值为 0),then 分支会执行。
  • 如果 条件一 失败(返回非 0),则会检查 条件二:
      如果 条件二 成功(返回值为 0),then 分支也会执行。
      如果 条件一 和 条件二 都失败(返回非 0),则会执行 else 分支。

这个规则是基于“或”运算符:只要有一个条件成功,then 就会执行。

# 场景示例:检查目录是否存在,如果不存在则创建
#!/bin/bash

DIR="/home/user/mydir"

if [[ -d "$DIR" ]] || mkdir "$DIR" > /dev/null 2>&1; then
    echo "目录已存在或已成功创建"
else
    echo "创建目录失败"
fi

3、! (逻辑非)

  • ! 用于对一个条件进行取反。如果条件为真,! 会使其为假,反之亦然。
# 语法结构:
if ! 条件一; then
    echo "条件一假,取反真"
else
    echo "条件一真,取反假"
fi

在这里插入图片描述

# 示例
#!/bin/bash

if [ ! -f "file.txt" ]; then
  echo "文件不存在"
else
  echo "文件存在"
fi

在这里插入图片描述

#!/bin/bash

# ! 与 && 配合使用
if [ ! -f "file.txt" ] && echo "假如条件二成功"; then
  echo "条件一(文件不存在,取反真)和条件二都执行成功"
else
  echo "条件一(文件存在,取反假)或条件二有失败"
fi

二、检查文件和文件夹方法

1、判断文件是否存在 -f

#!/bin/bash

# 获取当前脚本文件所在的目录
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)

# 设置要检查的文件名
file="${SCRIPT_DIR}/example.txt"
echo ${file}

# 判断文件是否存在
if [ -f "$file" ]; then
    echo "$file 文件存在"
else
    echo "$file 文件不存在"
fi

2、判断文件夹(目录)是否存在 -d

# 设置要检查的目录名
dir="/home/user/myfolder"

# 判断目录是否存在
if [ -d "$dir" ]; then
    echo "$dir 目录存在"
else
    echo "$dir 目录不存在"
fi
其它参数说明
-e检查文件或目录是否存在(不管是文件还是目录)
-r检查文件是否可读(非root权限下才能获取正确)
-w检查文件是否可写(非root权限下才能获取正确)
-x检查文件是否可执行(非root权限下才能获取正确)

三、字符串比较、数值比较及算术比较

1.整数数值对比

数值比较参数说明
-lt表示 “less than”(小于)
-eq表示 “equal to”(等于)
-ne表示 “not equal to”(不等于)
-gt表示 “greater than”(大于)
-ge表示 “greater than or equal to”(大于或等于)
-le表示 “less than or equal to”(小于或等于)

示例

#!/bin/bash

a=2
b=2

if [[ $a -eq $b ]]; then
    echo "$a 等于 $b"
else
    echo "$a 不等于 $b"
fi

2.字符串对比

字符串比较参数说明
==字符串相等
!=字符串不相等

示例

#!/bin/bash

a="abcdef"
b="abcde"

# 比较字符串是否相等
if [[ $a == $b ]]; then
    echo "字符串 '$a' 和 '$b' 相等"
else
    echo "字符串 '$a' 和 '$b' 不相等"
fi

# 比较字符串是否不相等
if [[ $a != $b ]]; then
    echo "字符串 '$a' 和 '$b' 不相等"
else
    echo "字符串 '$a' 和 '$b' 相等"
fi

3、算术比较

算术比较参数说明
<小于
==等于
!=不等于
>大于
>=大于或等于
<=小于或等于
#!/bin/bash

num1=5
num2=5

if (( num1 == num2 )); then
  echo "${num1}${num2} 相等"
else
  echo "${num1}${num2} 不相等"
fi


a=10
b=1

if (( (a + b) > 10 )); then
  echo "a 和 b 的和大于 10"
fi

在这里插入图片描述


四、检查命令的退出状态

#!/bin/bash

# 执行某个命令
ls /home > /dev/null 2>&1

# 判断命令是否成功
if [ $? -eq 0 ] ; then
    echo "命令执行成功"
else
    echo "命令执行失败"
fi

# $? 存储的是上一个命令的退出状态。
# 退出状态 0 通常表示命令成功执行,其他非零值表示命令执行失败。

http://www.kler.cn/a/400663.html

相关文章:

  • 网络安全:我们的安全防线
  • 优化C++设计模式:用模板代替虚函数与多态机制
  • 有限状态机(续)
  • 【JavaEE初阶 — 多线程】wait() notify()
  • 亿咖通科技应邀出席微软汽车行业智享会,分享ECARX AutoGPT全新实践
  • 第6章详细设计 -6.7 PCB工程需求表单
  • QT中的字符器类型
  • 基于springboot的景区网页设计与实现
  • 生成式人工智能(AIGC)在软件开发设计模式课程教学中的应用
  • Vue练习案例(中)
  • VUE 实现公告无缝循环滚动
  • 供应链管理、一件代发系统功能及源码分享 PHP+Mysql
  • Briefly unavailable for scheduled maintenance. Check back in a minute.
  • LINUX sysfs的使用方法举例
  • Cesium 相机系统
  • 10、标签的 ref 属性
  • springboot上传下载文件
  • 十六.SpringCloudAlibaba极简入门-整合Grpc代替OpenFeign
  • 跨平台WPF框架Avalonia教程 十五
  • 使⽤MATLAB进⾏⽬标检测
  • 数字化转型的三个阶段:信息化、数字化、数智化
  • 软考-信息安全-网络安全体系与网络安全模型
  • 高级java面试---spring.factories文件的解析源码API机制
  • Vue基础(2)_el和data的两种写法
  • uni-ui自动化导入
  • element ui 走马灯一页展示多个数据实现