shell 判断文件、目录是否存在

本文介绍了如何使用Shell脚本来判断文件或目录的存在状态及权限情况,并解释了-f与-e选项的区别,帮助读者掌握常用的文件条件判断逻辑。


转自:http://www.cnblogs.com/sunyubo/archive/2011/10/17/2282047.html

shell判断文件是否存在

  1.shell判断文件,目录是否存在或者具有权限 
2. #!/bin/sh 

3. 

4. myPath="/var/log/httpd/" 

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

6. 

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

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

9. mkdir "$myPath" 

10. fi 

11. 

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

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

14. mkdir "$myPath" 

15. fi 

16. 

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

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

19. touch "$myFile" 

20. fi 

21. 

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

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

24. echo "$myVar is empty" 

25. exit 0 

26. fi 

27. 

28. # 两个变量判断是否相等 

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

30. echo '$var1 eq $var2' 

31. else 

32. echo '$var1 not eq $var2' 

33. fi 


-f 和-e的区别 

Conditional Logic on Files 


-a file exists. 

-b file exists and is a block special file. 

-c file exists and is a character specialfile. 

-d file exists and is a directory. 

-e file exists (just the same as -a). 

-f file exists and is a regular file. 

-g file exists and has its setgid(2) bitset. 

-G file exists and has the same group ID as thisprocess. 

-k file exists and has its sticky bit set. 

-L file exists and is a symbolic link. 

-n string length is not zero. 

-o Named option is set on. 

-O file exists and is owned by the user ID of thisprocess. 

-p file exists and is a first in, first out (FIFO) special fileor 

named pipe. 

-r file exists and is readable by the currentprocess. 

-s file exists and has a size greater thanzero. 

-S file exists and is a socket. 

-t file descriptor number fildes is open and associated witha 

terminal device. 

-u file exists and has its setuid(2) bitset. 

-w file exists and is writable by the currentprocess. 

-x file exists and is executable by the currentprocess. 

-z string length is zero. 


是用 -s 还是用 -f 这个区别是很大的!


Shell 脚本中检查文件是否存在,可以使用 `-f` 操作符来判断目标是否是一个存在的普通文件。该操作符通常用于条件判断语句中(例如 `if` 或 `[ ]`)。以下是实现方式和注意事项: 1. **基本语法** 使用 `[ -f 文件名 ]` 来检查文件是否存在且是一个普通文件。注意,方括号与操作符之间必须有空格隔开,则会导致语法错误[^3]。 2. **完整的示例脚本** ```bash #!/bin/bash # 定义要检查的文件路径 filename="/etc/passwd" # 判断文件是否存在 if [ -f "$filename" ]; then echo "The file $filename exists and is a regular file." else echo "The file $filename does not exist or is not a regular file." fi ``` 3. **结合其他权限检查** 除了检查文件是否存在外,还可以同时验证文件的可读性、可写性和可执行性等权限信息。例如: - `-r`:检查文件是否存在并且可读。 - `-w`:检查文件是否存在并且可写。 - `-x`:检查文件是否存在并且可执行[^2]。 以下是一个包含多条件检查的脚本示例: ```bash #!/bin/bash read -p "请输入一个文件名: " filename # 先检查文件是否存在 if [ -f "$filename" ]; then echo "文件 $filename 存在,并且是普通文件。" # 再检查文件的权限 if [ -r "$filename" ]; then echo "文件 $filename 可读。" else echo "文件 $filename 不可读。" fi if [ -w "$filename" ]; then echo "文件 $filename 可写。" else echo "文件 $filename 不可写。" fi if [ -x "$filename" ]; then echo "文件 $filename 可执行。" else echo "文件 $filename 不可执行。" fi else echo "文件 $filename 不存在或不是普通文件。" fi ``` 4. **注意事项** - 确保在编写条件表达式时,在 `[` 和 `]` 周围留出空格,则会触发语法错误。 - 如果需要检查目录存在性,请使用 `-d` 操作符代替 `-f`。 - 在涉及用户输入时,务必对变量进行合理引用(如用双引号包裹),以防止文件名中包含空格的情况导致错误。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值