shell脚本判断变量文件目录的写法

本文介绍了Shell脚本的基础语法,包括字符串、数字及文件的判断方法,并提供了实际应用示例,帮助读者快速掌握Shell脚本的基本操作。

转载地址:http://haotushu.sinaapp.com/post-363.html

先写一些基本语法: 

1、字符串判断 

str1 = str2      当两个串有相同内容、长度时为真 

str1 != str2      当串str1和str2不等时为真 

-n str1        当串的长度大于0时为真(串非空) 

-z str1        当串的长度为0时为真(空串) 

str1           当串str1为非空时为真 

2、数字的判断 

int1 -eq int2    两数相等为真 

int1 -ne int2    两数不等为真 

int1 -gt int2    int1大于int2为真 

int1 -ge int2    int1大于等于int2为真 

int1 -lt int2    int1小于int2为真 

int1 -le int2    int1小于等于int2为真 

3 文件的判断 

-r file     用户可读为真 

-w file     用户可写为真 

-x file     用户可执行为真 

-f file     文件为正规文件为真 

-d file     文件为目录为真 

-c file     文件为字符特殊文件为真 

-b file     文件为块特殊文件为真 

-s file     文件大小非0时为真 

-t file     当文件描述符(默认为1)指定的设备为终端时为真 

3、复杂逻辑判断 

-a         与 

-o        或 

!        非 

 

下面是一些使用实例: 

#!/bin/sh 

myPath="/var/log/httpd/" 

myFile="/var /log/httpd/access.log" 

#这里的-x 参数判断$myPath是否存在并且是否具有可执行权限 

if [ ! -x "$myPath"]; then 

mkdir "$myPath" 

fi 

#这里的-d 参数判断$myPath是否存在 

if [ ! -d "$myPath"]; then 

mkdir "$myPath" 

fi 

#这里的-f参数判断$myFile是否存在 

if [ ! -f "$myFile" ]; then 

touch "$myFile" 

fi 

#其他参数还有-n,-n是判断一个变量是否是否有值 

if [ ! -n "$myVar" ]; then 

echo "$myVar is empty" 

exit 0 

fi 

#两个变量判断是否相等 

if [ "$var1" == "$var2" ]; then 

echo '$var1 eq $var2' 

else 

echo '$var1 not eq $var2' 

fi 

 

 

      if list then 

          do something here 

      elif list then 

          do another thing here 

      else 

         do something else here 

      fi   

EX1: 

#!/bin/sh 

SYSTEM=`uname -s`    #获取操作系统类型,我本地是linux 

if [ $SYSTEM = "Linux" ] ; then     #如果是linux的话打印linux字符串 

echo "Linux" 

elif [ $SYSTEM = "FreeBSD" ] ; then   

echo "FreeBSD" 

elif [ $SYSTEM = "Solaris" ] ; then 

echo "Solaris" 

else 

echo "What?" 

fi     #ifend 

基本上和其他脚本语言一样。没有太大区别。不过值得注意的是。[]里面的条件判断。


<think> 我们正在讨论如何在shell脚本判断文件是否存在。根据用户之前的提问和引用内容,我们可以总结出以下几种常用的方法: 1. 使用`-e`选项:检查文件或目录是否存在(不区分类型) 2. 使用`-f`选项:检查文件是否存在且为普通文件 3. 使用`-d`选项:检查目录是否存在 此外,还可以结合其他选项检查权限,如`-r`(可读)、`-w`(可写)、`-x`(可执行)等。 下面我们将详细说明这些方法,并给出示例脚本片段。 ### 判断文件存在的基本语法 在shell脚本中,我们使用`test`命令或`[ ]`测试条件(注意`[`是命令,需要空格)。语法如下: ```bash if [ -e "/path/to/target" ]; then # 文件/目录存在时的操作 else # 文件/目录不存在时的操作 fi ``` ### 具体判断方法 #### 1. 判断文件是否存在(不区分类型) ```bash if [ -e "/path/to/file_or_dir" ]; then echo "文件或目录存在" else echo "文件或目录不存在" fi ``` #### 2. 判断文件是否存在且为普通文件 ```bash if [ -f "/path/to/file" ]; then echo "文件存在且是普通文件" else echo "文件不存在或不是普通文件" fi ``` #### 3. 判断目录是否存在 ```bash if [ -d "/path/to/dir" ]; then echo "目录存在" else echo "目录不存在" fi ``` #### 4. 检查文件存在的同时检查权限 ```bash # 检查文件是否存在且可读 if [ -r "/path/to/file" ]; then echo "文件存在且可读" fi # 检查文件是否存在且可写 if [ -w "/path/to/file" ]; then echo "文件存在且可写" fi # 检查文件是否存在且可执行 if [ -x "/path/to/file" ]; then echo "文件存在且可执行" fi ``` ### 示例脚本:如果文件不存在则创建 ```bash #!/bin/bash file_path="/tmp/example.log" if [ ! -f "$file_path" ]; then touch "$file_path" echo "创建了文件: $file_path" else echo "文件已存在: $file_path" fi ``` ### 注意事项 1. **变量引用**:当路径包含空格或特殊字符时,变量引用必须加双引号(如`"$file_path"`)。 2. **取反操作**:使用`!`来取反条件,注意`!`和后面的条件之间要有空格(如`[ ! -f ... ]`)。 3. **组合条件**:可以使用`-a`(and)和`-o`(or)组合多个条件,但更推荐使用`&&`和`||`。 ### 组合条件示例 ```bash # 检查文件存在且可写 if [ -f "$file_path" ] && [ -w "$file_path" ]; then echo "文件存在且可写" fi # 检查目录存在或文件存在 if [ -d "$target" ] || [ -f "$target" ]; then echo "目标存在(可能是目录或文件)" fi ``` ### 相关扩展问题 1. 如何判断一个符号链接(软链接)是否存在? 使用`-L`选项:`[ -L "/path/to/link" ]`[^3] 2. 如何判断文件是否为空? 使用`-s`选项(非空为真):`[ -s "$file" ]` 或 `[ ! -s "$file" ]`判断空文件[^3] 3. 如何检查设备文件? `-b`:块设备文件,`-c`:字符设备文件[^3] 通过以上方法,可以在shell脚本中灵活判断文件和目录的存在性及属性。 ### §§相关问题§§ 1. 如何在shell判断多个文件是否存在? 2. 如何递归检查目录下是否存在某个文件? 3. 在Linux中,如何检查一个文件是否被修改过? </think> ### Shell脚本判断文件存在的命令详解 在Shell脚本中,判断文件存在主要通过`test`命令(或`[ ]`)配合文件测试运算符实现。以下是核心方法: #### 1. 基础文件存在检查 ```bash if [ -e "/path/to/file" ]; then echo "文件存在" else echo "文件不存在" fi ``` `-e` 检查文件或目录是否存在(不区分类型)[^3] #### 2. 精确文件类型检查 ```bash # 检查普通文件 if [ -f "/path/to/file" ]; then echo "普通文件存在" # 检查目录 elif [ -d "/path/to/dir" ]; then echo "目录存在" fi ``` `-f` 检查是否为普通文件,`-d` 检查是否为目录[^3] #### 3. 带权限检查的文件存在验证 ```bash if [ -x "/path/to/script.sh" ]; then echo "文件存在且可执行" elif [ -r "/path/to/file" ]; then echo "文件存在且可读" fi ``` `-x` 检查可执行权限,`-r` 检查可读权限[^2] #### 4. 文件不存在的判断与创建 ```bash file="/var/log/app.log" if [ ! -f "$file" ]; then # ! 表示取反 touch "$file" && echo "已创建文件" fi ``` ### 常用文件测试运算符汇总 | 运算符 | 功能描述 | 示例 | |--------|------------------------------|----------------------| | `-e` | 文件/目录存在 | `[ -e "file" ]` | | `-f` | 存在且为普通文件 | `[ -f "file" ]` | | `-d` | 存在且为目录 | `[ -d "dir" ]` | | `-s` | 文件存在且大小>0字节 | `[ -s "file" ]` | | `-r` | 存在且有读权限 | `[ -r "file" ]` | | `-w` | 存在且有写权限 | `[ -w "file" ]` | | `-x` | 存在且有执行权限 | `[ -x "script" ]` | | `-L` | 存在且为符号链接 | `[ -L "symlink" ]` | | `-h` | 同上(兼容性写法) | `[ -h "symlink" ]` | ### 实际应用示例 ```bash #!/bin/bash config="/etc/app.conf" # 检查配置文件存在性 if [ ! -f "$config" ]; then echo "错误: 配置文件 $config 缺失" >&2 exit 1 fi # 检查日志目录可写性 log_dir="/var/log/app" [ ! -d "$log_dir" ] && mkdir -p "$log_dir" [ ! -w "$log_dir" ] && chmod 755 "$log_dir" ``` ### 注意事项 1. **引号使用**:路径含空格时需加双引号,如 `[ -f "$file path" ]` 2. **变量展开**:变量前加`$`符号,如 `[ -e "$FILE" ]` 3. **空格要求**:运算符两侧必须有空格,如 `[ -f file ]` ✅,`[-f file]` ❌ ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值