当前位置:首页 > 服务器技术 > 正文

掌握Shell脚本的决策力(Linux Shell逻辑测试从入门到实践)

在编写 Linux Shell 脚本时,我们经常需要根据不同的条件执行不同的操作。比如:判断文件是否存在、比较两个数字大小、检查用户输入是否合法等。这些都离不开 Shell 逻辑测试。本文将带你从零开始,轻松掌握 Shell 中的条件判断与逻辑测试,即使你是初学者也能看懂!

掌握Shell脚本的决策力(Linux Shell逻辑测试从入门到实践) Linux Shell逻辑测试 Shell条件判断 bash if语句 shell脚本教程 第1张

什么是 Shell 逻辑测试?

Shell 逻辑测试 是指在 Shell 脚本中使用条件表达式来判断某个条件是否成立,并据此决定程序的执行路径。它通常配合 ifwhileuntil 等控制结构使用。

基本语法:test 命令与 [ ]

在 Shell 中,有两种常用方式来进行逻辑测试:

  • 使用 test 命令
  • 使用方括号 [ ](注意:左右必须有空格!)

例如,判断一个变量是否为空:

# 使用 testif test -z "$name"; then  echo "名字为空"fi# 使用 [ ]if [ -z "$name" ]; then  echo "名字为空"fi

常用测试操作符

Shell 提供了丰富的测试操作符,主要分为三类:

1. 文件测试

  • -e file:文件存在
  • -f file:是普通文件
  • -d dir:是目录
  • -r file:可读
  • -w file:可写
  • -x file:可执行
if [ -f "/etc/passwd" ]; then  echo "passwd 文件存在且是普通文件"fi

2. 字符串测试

  • -z str:字符串长度为 0(空)
  • -n str:字符串长度非 0(非空)
  • str1 = str2:两字符串相等
  • str1 != str2:两字符串不等
read -p "请输入用户名: " userif [ -z "$user" ]; then  echo "错误:用户名不能为空!"else  echo "欢迎,$user!"fi

3. 数值比较

  • num1 -eq num2:等于(equal)
  • num1 -ne num2:不等于(not equal)
  • num1 -lt num2:小于(less than)
  • num1 -le num2:小于等于
  • num1 -gt num2:大于(greater than)
  • num1 -ge num2:大于等于
age=20if [ $age -ge 18 ]; then  echo "你已成年"else  echo "你还未成年"fi

逻辑组合:AND、OR、NOT

多个条件可以通过逻辑运算符组合:

  • &&-a:逻辑 AND(与)
  • ||-o:逻辑 OR(或)
  • !:逻辑 NOT(非)
# 判断文件存在且可读if [ -e "data.txt" ] && [ -r "data.txt" ]; then  cat data.txtfi# 或者用 -a(但推荐使用 &&,更清晰)if [ -e "data.txt" -a -r "data.txt" ]; then  cat data.txtfi

实战小例子:安全删除脚本

下面是一个结合多种测试的小脚本,用于安全删除文件:

#!/bin/bashread -p "请输入要删除的文件路径: " fileif [ ! -e "$file" ]; then  echo "错误:文件不存在!"elif [ ! -f "$file" ]; then  echo "错误:这不是一个普通文件!"elif [ ! -w "$file" ]; then  echo "错误:你没有权限删除此文件!"else  read -p "确定要删除 $file 吗?(y/n): " confirm  if [ "$confirm" = "y" ]; then    rm "$file"    echo "文件已删除。"  else    echo "操作已取消。"  fifi

常见陷阱与注意事项

  • 空格很重要! [ -f file ] 正确,[-ffile] 错误。
  • 变量最好用双引号包裹:"$var",防止变量为空时报错。
  • 数值比较不能用 ==>,必须用 -eq-gt 等。
  • 字符串比较用 ===(在 [ ] 中两者等效)。

结语

通过本教程,你应该已经掌握了 Linux Shell 逻辑测试 的核心知识。无论是 Shell 条件判断bash if 语句 的使用,还是实际脚本编写,这些技能都是 shell 脚本教程 中的基础。多加练习,你很快就能写出健壮、智能的 Shell 脚本!

提示:在终端中多尝试 man test 查看完整测试选项。