网站首页 > 技术教程 正文
节假日懈怠了两天,今天继续介绍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. 主要特点
- 支持更复杂的逻辑[[ ... ]] 允许使用逻辑运算符进行更复杂的条件组合:
if [[ condition1 && condition2 ]]; then
# code
fi
if [[ condition1 || condition2 ]]; then
# code
fi
示例:
if [[ $age -ge 18 && $salary -ge 2500 ]]; then
echo "符合条件"
fi
- 改进的字符串比较[[ ... ]] 支持更灵活的字符串比较,包括模式匹配:
示例:
if [[ $name == "John*" ]]; then
echo "名字以 John 开头"
fi
- 相等:==
- 不等:!=
- 模式匹配:支持通配符,如 * 和 ?
- 安全性使用 [[ ... ]] 时,Shell 会自动处理特殊字符,减少了因为特殊字符(如空格和括号)导致的错误。例如:示例:
file="/path/to/some file"
if [[ -f $file ]]; then
echo "文件存在"
fi
- 无需引号在 [[ ... ]] 中,变量可以不加引号,但仍建议加上,以避免潜在的错误。相比于 [ ... ],[[ ... ]] 对空值和特殊字符的处理更宽容。示例:
if [[ $var == "value" ]]; then
echo "变量匹配"
fi
- 支持正则表达式[[ ... ]] 支持使用 =~ 进行正则表达式匹配:示例:
if [[ $email =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; then
echo "有效的电子邮件地址"
fi
- 不需要空格在 [[ ... ]] 语法中,操作符两侧的空格是可选的,但为了提高可读性,通常还是使用空格。
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 中广泛使用。
猜你喜欢
- 2024-10-17 REGEXP函数,基础用法请收好(regexp_replace函数的用法)
- 2024-10-17 Excel VBA入门教程 1.7 正则表达式
- 2024-10-17 一篇文章从了解到入门shell(shell 入门)
- 2024-10-17 正则匹配MAC地址(匹配ip正则)
- 2024-10-17 一坨一坨 if/else 参数校验,被 SpringBoot 参数校验组件整干净了
- 2024-10-17 每天三分钟搞定linux shell脚本10 字符串相关的if判断
- 2024-10-17 正则表达式真的很强大,可惜你不会写
- 2024-10-17 点赞收藏:PyTorch常用代码段整理合集
- 2024-10-17 绝对干货python正则,理论加实践(python 正则 \s)
- 2024-10-17 SUMIF函数支持正则了?!(sumifs的条件能否用函数)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)