我正在学习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的修改版本
答案 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