Bash 我不知道我的shell脚本是否正确

Bash 我不知道我的shell脚本是否正确,bash,if-statement,Bash,If Statement,我有一个使用for循环的作业,但我不太明白我必须在那里完成的任务。我写了一个脚本,但我觉得它不是一个正确的脚本。请帮忙 问题是: 编写一个shell脚本,列出任何目录的内容,并为每个文件(包括不可见文件)指明该文件是目录还是普通文件,以及该文件对此进程是公共的和/或可执行的 !/bin/bash 如果[$-lt 1];然后 回显文件不存在 回响 运行命令所需的echo变量 fi 回音----------------------- 回音----------------------- 因为我在$*

我有一个使用for循环的作业,但我不太明白我必须在那里完成的任务。我写了一个脚本,但我觉得它不是一个正确的脚本。请帮忙

问题是:

编写一个shell脚本,列出任何目录的内容,并为每个文件(包括不可见文件)指明该文件是目录还是普通文件,以及该文件对此进程是公共的和/或可执行的

!/bin/bash 如果[$-lt 1];然后 回显文件不存在 回响 运行命令所需的echo变量 fi 回音----------------------- 回音----------------------- 因为我在$* 做 如果[-f$i];然后 回声是一个文件; echo这是一个文件和目录列表,单位为$i ls-a$i fi 完成 回音--------------------- 如果[-d$i];然后 回声目录; echo这是文件和目录的列表,单位为$i ls-a$i fi 回音--------------------- 如果[-x$i];然后 回显可执行文件 echo这是一个以$i为单位的可执行文件列表 ls-x$i fi 回音--------------------- 如果[-r$i];然后 echo此文件是公共文件 否则这是一个私人文件 fi
写得不好的规范是教育的祸根。“公共”听起来像是个错误的词。我想这意味着可读性

检查是否有参数,但如果没有,则不退出程序。我还要确认它是一个目录,并且可读

会对你有很多好处。在你学会这些东西之前,你要做大量的阅读,然后大量参考以确定

,为自己创建一些测试,以证明它们有效并且您理解它们,您的工作将完成一半以上

不要使用[。通常最好总是使用[],除非您使用或case或其他构造

我看不出指定了for循环,但应该可以。请注意,可能需要分别指定$1/*和$1/*

但是,将所有测试放在一个循环中。对于每个文件,测试它是否是目录-如果是,报告它。如果是普通文件,测试它-如果是,报告它

我不喜欢为某人做家庭作业,但看起来你可以用一个例子来简化这一点。我建议你不要像写的那样使用它——把它拆开,让它更清楚,但这是一个一般逻辑的模板

#! /bin/env bash

(( $# )) && [[ -d "$1" ]] && [[ -r "$1" ]] || {
    echo "use: $0 <dir>" >&2
    exit 1
}

for e in "$1"/.* "$1"/*
do  echo "$e:"
    [[ -d "$e" ]] && echo " is a directory"
    [[ -f "$e" ]] && echo " is a plain file"
    [[ -r "$e" ]] && echo " is readable"
    [[ -x "$e" ]] && echo " is executable"
done
将此与-

for i in $*
do  if [ -f $i ]; then 
       echo " it's a file";
       echo "THIS IS A LIST OF FILE and DIRECTORY in $i"
       ls -a $i
    fi
done
echo -----------------------------------------
if [ -d $i ]; then 
   echo "directory" ;
   echo "THIS IS A LIST OF FILES AND DIRETORY in $i"
   ls -a $i
fi
您正在测试每个条目,以查看它是否是文件,如果是,则每次报告这是一个文件和目录列表,单位为$i

但是只测试最后一个,看看它是否是一个目录,因为[-d$i]在完成之后


…您是否在某个地方运行此脚本来尝试它,并查看结果?

如果您想改进脚本,请从正确引用变量开始。查看一下。我觉得它不是一个正确的脚本-您有什么感觉?脚本是否工作?感谢您的帮助。理解for循环确实更容易。我不是在要求别人不要这样做o做作业。但我想知道我做错了什么或错过了什么。请更新我的回复。希望能有所帮助。
$: for i in 1 2 3
> do echo $i
> done
1
2
3
$: echo $i
3
for i in $*
do  if [ -f $i ]; then 
       echo " it's a file";
       echo "THIS IS A LIST OF FILE and DIRECTORY in $i"
       ls -a $i
    fi
done
echo -----------------------------------------
if [ -d $i ]; then 
   echo "directory" ;
   echo "THIS IS A LIST OF FILES AND DIRETORY in $i"
   ls -a $i
fi