如何在Bash中编写if条件?含空文本文件校验场景
1. 如何在Bash中编写if条件语句?
Bash的if语句核心是条件测试,基本结构如下:
if [ 条件表达式 ]; then # 条件成立时执行的命令 elif [ 另一个条件表达式 ]; then # 第二个条件成立时执行的命令 else # 所有条件都不成立时执行的命令 fi
常见条件类型示例
文件相关测试
检查文件是否存在:if [ -e "/path/to/file" ]; then echo "文件存在" fi检查是否为目录:
if [ -d "/path/to/dir" ]; then echo "这是一个目录" fi字符串比较
判断字符串是否相等:str1="hello" str2="world" if [ "$str1" = "$str2" ]; then echo "字符串相等" else echo "字符串不相等" fi判断字符串是否为空:
if [ -z "$empty_str" ]; then echo "字符串为空" fi数值比较
需用-eq(等于)、-gt(大于)等专用运算符,不能直接用==或>:num1=10 num2=20 if [ "$num1" -lt "$num2" ]; then echo "$num1 小于 $num2" fi逻辑运算
用&&(逻辑与)、||(逻辑或)组合条件:# 文件存在且可读 if [ -e "/path/to/file" ] && [ -r "/path/to/file" ]; then echo "文件存在且可读" fi
也可以用双括号(( ))做数值运算,或双方括号[[ ]]支持通配符匹配:
# 匹配以h开头的字符串 if [[ "$str" == h* ]]; then echo "字符串以h开头" fi
2. 如何在Bash脚本中实现:校验文本文件是否为空,若为空则继续执行脚本,否则执行指定命令?
最简洁的方式是用-s测试选项(检查文件存在且非空),脚本示例如下:
#!/bin/bash FILE="/path/to/your/file.txt" # 检查文件是否非空 if [ -s "$FILE" ]; then # 文件非空时执行指定命令,这里替换为你的实际操作 echo "文件非空,执行指定命令..." cat "$FILE" else # 文件为空或不存在时,继续执行后续脚本逻辑 echo "文件为空或不存在,继续执行脚本..." # 后续命令写在这里 fi # 脚本后续的其他逻辑 echo "脚本执行到末尾"
补充说明:
如果需要严格区分“文件存在但为空”和“文件不存在”,可以拆分条件:
if [ -f "$FILE" ]; then if [ -s "$FILE" ]; then echo "文件存在且非空,执行命令" # 指定命令 else echo "文件存在但为空,继续执行" # 后续逻辑 fi else echo "文件不存在,继续执行" # 后续逻辑 fi
内容的提问来源于stack exchange,提问作者Alex Zarankin
相关产品推荐
相关产品推荐

