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 通常表示命令成功执行,其他非零值表示命令执行失败。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值