显示文件权限的bash脚本提供错误的输出

时间:2012-08-30 20:06:29

标签: linux bash

我正在学习bash,并希望你们可以通过以下脚本帮助我解决正在发生的事情

#!/bin/bash

#primer if
if [ -f $file1 ]; then
        echo "file1 is a file"
else
        echo "file1 is not a regular file"
fi
#segundo if
if [ -r $file1 ]; then
        echo "file1 has read permission"
else
    echo "file1 doesnot have read permission"
fi
#tercer if
if [ -w $file1 ]; then
        echo "file1 has write permission"
else
    echo "file1 doesnot have write permission"
fi
#cuarto if
if [ -x $file1 ]; then
        echo "file1 has execute permission"
else
    echo "file1 doesnot have execute permission"
fi

在我看来,如果我更改文件权限并不重要,因为输出始终是相同的

fmp@eva00:~/Books/2012/ubuntu_unleashed$ ./script.sh 
file1 is a file
file1 has read permission
file1 has write permission
file1 has execute permission
fmp@eva00:~/Books/2012/ubuntu_unleashed$ ll file1
-rw-r--r-- 1 fmp fmp 0 Aug 30 13:21 file1
fmp@eva00:~/Books/2012/ubuntu_unleashed$ chmod 200 file1
fmp@eva00:~/Books/2012/ubuntu_unleashed$ ./script.sh 
file1 is a file
file1 has read permission
file1 has write permission
file1 has execute permission
fmp@eva00:~/Books/2012/ubuntu_unleashed$ ll file1
--w------- 1 fmp fmp 0 Aug 30 13:21 file1
fmp@eva00:~/Books/2012/ubuntu_unleashed$ chmod 000 file1 
fmp@eva00:~/Books/2012/ubuntu_unleashed$ ll file1
---------- 1 fmp fmp 0 Aug 30 13:21 file1
fmp@eva00:~/Books/2012/ubuntu_unleashed$ ./script.sh 
file1 is a file
file1 has read permission
file1 has write permission
file1 has execute permission

file1可以为空或仍然输出相同,进行相同的测试

有人可以向我解释有什么问题吗?

由于

BTW这里的脚本是ubuntu发布的2011年版(书籍网站http://ubuntuunleashed.com/)第233页的compare3的修改版本

4 个答案:

答案 0 :(得分:4)

file1变量未定义。

您应该在脚本file1="file1"

的开头添加

答案 1 :(得分:3)

这就是你所有测试都成功的原因:因为变量是null,你得到

if [ -f  ]; ...
if [ -r  ]; ...
if [ -w  ]; ...
if [ -x  ]; ...

因为您使用的是单个括号,所以bash只会看到一个单词来表示测试条件。当测试命令只看到一个参数时,如果该单词不为空,则结果为true,并且在每种情况下,该单词包含2个字符。

当然修复是声明变量。此外,您应该使用bash的条件构造

if [[ -f $file ]]; ...
if [[ -r $file ]]; ...
if [[ -w $file ]]; ...
if [[ -x $file ]]; ...

当使用双括号时,即使变量为空或为空,bash也会在条件中看到2个单词。

答案 2 :(得分:2)

更改$file1的{​​{1}}变量,或在脚本开头添加以下内容(在#!/ bin / bash之后):

$1

所以你可以像这样调用你的脚本:

set file1=$1

答案 3 :(得分:2)

或删除美元符号,或将$file1替换为$1,并将脚本用作./script.sh file1