0

我正在尝试进行错误检查,以便如果文件不是普通文件,它将回显文件不是普通文件。

#!/bin/csh

echo Enter file name
set filename = $<

if(-f $filename)then

        if(-z $filename)then
        rm $filename    

        else
        clear
        echo $filename
        du -sh $filename
        stat -c %h $filename
        stat -c %U $filename
        date -r $filename

        endif
else
echo File is not an ordinary file
endif

当我使用例如 fake.txt 运行它时,它会出现

du: 无法访问fake.txt': No such file or directory stat: cannot statfake.txt': 没有这样的文件或目录 stat: 无法统计 `fake.txt': 没有这样的文件或目录 date: fake.txt: 没有这样的文件或目录

我错过了什么?

REDO:

#!/bin/csh

echo Enter file name
set filename = $<

endif
test -f $filename

if ( $status == 0 ) then
        if(-z $filename)then
        rm $filename

        else
        clear
        echo $filename
        du -sh $filename
        stat -c %h $filename
        stat -c %U $filenam
        endif
else
  echo "File is not an ordinary file."
endif
4

1 回答 1

0

有一种更简单的方法可以确定文件是否是常规文件(并且存在):

#!/bin/csh

echo "Enter filename: "
set filename = $<
test -f $filename

if ( $status == 0 ) then
  echo "File is an ordinary file."
else
  echo "File is not an ordinary file."
endif

# end of file.

可以从相应的手册页中找到有关 test(1) 工作原理的详细信息。在此示例中,我简单地使用了 test(1) 以非零退出代码退出的事实,以防使用的测试条件不满足: switch -f 测试给定的参数是否存在并且是常规文件。

于 2013-11-13T07:36:02.243 回答