编程技术分享平台

网站首页 > 技术教程 正文

Linux 脚本 if判断详解(linux脚本if语句)

xnh888 2024-10-17 17:32:38 技术教程 18 ℃ 0 评论

节假日懈怠了两天,今天继续介绍shell条件判断。文字有些长,还望大家耐心读完,必定收货满满。在 Shell 脚本中,if 语句用于根据条件执行不同的代码块。下面是 if 语句的详细解释和格式示例,包括基础用法、if-else、if-elif-else 以及复合条件判断。

1. 基础 if语句

用于简单的条件判断。基本语法如下:

if [ condition ]; then
    # 当 condition 为 true 时执行的代码
fi

示例

#!/bin/bash

number=10

if [ $number -gt 0 ]; then
    echo "正数"
fi

在这个示例中,[ $number -gt 0 ] 是条件判断,检查变量 number 是否大于 0。如果条件为真,则执行 echo "正数"。

2. if-else语句

用于处理两种可能的情况:条件为真和条件为假。

基本语法

if [ condition ]; then
    # 当 condition 为 true 时执行的代码
else
    # 当 condition 为 false 时执行的代码
fi

示例

#!/bin/bash

number=-5

if [ $number -gt 0 ]; then
    echo "正数"
else
    echo "非正数"
fi

3. if-elif-else语句

用于处理多个条件分支。elif 用于添加额外的条件检查。

基本语法

if [ condition1 ]; then
    # 当 condition1 为 true 时执行的代码
elif [ condition2 ]; then
    # 当 condition1 为 false 且 condition2 为 true 时执行的代码
else
    # 当所有条件都为 false 时执行的代码
fi

示例

#!/bin/bash

number=0

if [ $number -gt 0 ]; then
    echo "正数"
elif [ $number -lt 0 ]; then
    echo "负数"
else
    echo "零"
fi

4. 逻辑运算符

说明:

  • 与 (-a&&):两个条件都为真时,整体为真。
  • 或 (-o||):至少一个条件为真时,整体为真。
  • 非 (!):条件为假时,整体为真。

示例

4.1. 与运算符

#!/bin/bash

age=25
salary=3000

if [ $age -ge 18 ] && [ $salary -ge 2500 ]; then
    echo "符合条件"
else
    echo "不符合条件"
fi

4.2. 或运算符

#!/bin/bash

temperature=30

if [ $temperature -lt 0 ] || [ $temperature -gt 35 ]; then
    echo "温度极端"
else
    echo "温度正常"
fi

4.3. 非运算符

#!/bin/bash

file="/path/to/file"

if [ ! -e $file ]; then
    echo "文件不存在"
fi

5. 处理字符串条件

可以对字符串进行比较,检查是否为空、是否相等等。

5.1. 字符串为空检查

#!/bin/bash

string=""

if [ -z "$string" ]; then
    echo "字符串为空"
else
    echo "字符串非空"
fi

5.2. 字符串是否非空

if [ -n "$string" ]; then
    echo "字符串非空"
fi

5.3. 字符串相等检查

#!/bin/bash

str1="hello"
str2="world"

if [ "$str1" = "$str2" ]; then
    echo "字符串相等"
else
    echo "字符串不相等"
fi

5.4. 字符串是否不相等

if [ "$str1" != "$str2" ]; then
    echo "字符串不相等"
fi

6. 处理文件条件

可以检查文件的状态,例如是否存在、是否是文件或目录等。

6.1. 文件是否存在

#!/bin/bash

file="/path/to/file"

if [ -e "$file" ]; then
    echo "文件存在"
else
    echo "文件不存在"
fi

6.2. 是否为目录

#!/bin/bash

dir="/path/to/dir"

if [ -d "$dir" ]; then
    echo "这是一个目录"
else
    echo "这不是一个目录"
fi

6.3. 是否为文件

#!/bin/bash

file="/path/to/file"

if [ -f "$file" ]; then
    echo "这是一个文件"
else
    echo "这不是一个文件"
fi

6.4. 文件是否可读

if [ -r "filename" ]; then
    echo "文件可读"
fi

6.5. 文件是否可写

if [ -w "filename" ]; then
    echo "文件可写"
fi

6.6. 文件是否可执行

if [ -x "filename" ]; then
    echo "文件可执行"
fi

7. 整数测试

用于对整数进行比较。

  • 整数比较(大于)
if [ "$num1" -gt "$num2" ]; then
    echo "$num1 大于 $num2"
fi
  • 整数比较(小于)
if [ "$num1" -lt "$num2" ]; then
    echo "$num1 小于 $num2"
fi
  • 整数比较(等于)
if [ "$num1" -eq "$num2" ]; then
    echo "$num1 等于 $num2"
fi
  • 整数比较(不等于)
if [ "$num1" -ne "$num2" ]; then
    echo "$num1 不等于 $num2"
fi
  • 整数比较(大于或等于)
if [ "$num1" -ge "$num2" ]; then
    echo "$num1 大于或等于 $num2"
fi
  • 整数比较(小于或等于)
if [ "$num1" -le "$num2" ]; then
    echo "$num1 小于或等于 $num2"
fi

命令的退出状态

可以根据命令的退出状态进行条件判断。

  • 命令成功
if command; then
    echo "命令成功"
fi
  • 命令失败
if ! command; then
    echo "命令失败"
fi

8. 数组元素

可以检查数组元素的存在性和状态(需要使用 Bash)。

  • 数组元素是否存在
if [ ${#array[@]} -gt 0 ]; then
    echo "数组非空"
fi

9. if与命令替换

可以结合命令替换来基于命令的输出进行条件判断:

if command; then
    # code
fi

示例:

if ls /path/to/dir > /dev/null 2>&1; then
    echo "目录存在"
fi

10. 使用test进行判断

test 命令可以用于条件判断,等价于单方括号 [,但通常更少见:

if test condition; then
    # code
fi

示例:

if test -f "file.txt"; then
    echo "文件存在"
fi

11. 使用 [[ ]] 进行判断

在 Shell 脚本中,[[ ... ]] 是 Bash 和一些其他 Shell 提供的扩展,用于更复杂和更灵活的条件测试。与传统的 [ ... ] 和 test 命令相比,[[ ... ]] 提供了额外的功能和更强的表达能力。以下是对 [[ ... ]] 的详细解释:

11.1.1. 基本语法

if [[ condition ]]; then
    # code
fi

11.1.2. 主要特点

  1. 支持更复杂的逻辑[[ ... ]] 允许使用逻辑运算符进行更复杂的条件组合:
if [[ condition1 && condition2 ]]; then
    # code
fi

if [[ condition1 || condition2 ]]; then
    # code
fi

示例

if [[ $age -ge 18 && $salary -ge 2500 ]]; then
    echo "符合条件"
fi
  1. 改进的字符串比较[[ ... ]] 支持更灵活的字符串比较,包括模式匹配:

示例

if [[ $name == "John*" ]]; then
    echo "名字以 John 开头"
fi
    • 相等:==
    • 不等:!=
    • 模式匹配:支持通配符,如 * 和 ?
  1. 安全性使用 [[ ... ]] 时,Shell 会自动处理特殊字符,减少了因为特殊字符(如空格和括号)导致的错误。例如:示例
file="/path/to/some file"
if [[ -f $file ]]; then
    echo "文件存在"
fi
  1. 无需引号在 [[ ... ]] 中,变量可以不加引号,但仍建议加上,以避免潜在的错误。相比于 [ ... ],[[ ... ]] 对空值和特殊字符的处理更宽容。示例
if [[ $var == "value" ]]; then
    echo "变量匹配"
fi
  1. 支持正则表达式[[ ... ]] 支持使用 =~ 进行正则表达式匹配:示例
if [[ $email =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; then
    echo "有效的电子邮件地址"
fi
  1. 不需要空格在 [[ ... ]] 语法中,操作符两侧的空格是可选的,但为了提高可读性,通常还是使用空格。

11.1.3. 例子

11.1.3.1. 字符串比较

str1="hello"
str2="world"

if [[ $str1 == "hello" ]]; then
    echo "str1 是 hello"
fi

if [[ $str1 != $str2 ]]; then
    echo "str1 和 str2 不相等"
fi

11.1.3.2. 数字比较

num1=10
num2=20

if [[ $num1 -lt $num2 ]]; then
    echo "$num1 小于 $num2"
fi

11.1.3.3. 文件测试

file="/path/to/file"

if [[ -f $file ]]; then
    echo "$file 是一个文件"
fi

if [[ -d $file ]]; then
    echo "$file 是一个目录"
fi

11.1.3.4. 逻辑运算

[[ 可以使用 && 和 || 进行更复杂的条件组合,而不需要额外的方括号:

if [[ condition1 && condition2 ]]; then
    # code
fi

if [[ condition1 || condition2 ]]; then
    # code
fi

示例:

if [[ $age -ge 18 && $salary -ge 2500 ]]; then
    echo "符合条件"
fi

说明

  • [[ ... ]] 提供了比传统 [ ... ] 和 test 更强大的功能,支持复杂的逻辑、模式匹配、正则表达式等。
  • 它在处理特殊字符和空值时更为安全,通常推荐在 Bash 脚本中使用。
  • [[ ... ]] 不是 POSIX 标准的一部分,因此在某些 Shell 环境(如 /bin/sh)中可能不可用,但在 Bash 和其他支持的 Shell 中广泛使用。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表