Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux shell脚本,两个目录之间的差异_Linux_Bash - Fatal编程技术网

Linux shell脚本,两个目录之间的差异

Linux shell脚本,两个目录之间的差异,linux,bash,Linux,Bash,我做了这个密码 if [ $# -ne 2 ]; then echo "use $0 dir1 dir2" exit 1 fi if [ ! -d $1 ]; then echo "$1 nu este un director" exit 1 fi if [ ! -d $2 ]; then echo "$2 nu este un director " exit 1 fi a=0 k=1 for $1 in `ls` do if [ -f $1 ]; then a=`exp $a + 1`

我做了这个密码

if [ $# -ne 2 ]; then
echo "use $0 dir1 dir2"
exit 1
fi

if [ ! -d $1 ]; then
echo "$1 nu este un director"
exit 1
fi

if [ ! -d $2 ]; then
echo "$2 nu este un director "
exit 1
fi

a=0
k=1
for $1 in `ls`
do
if [ -f $1 ];  then
a=`exp $a + 1`
fi
done
echo "Ther are $a file "
我想比较两个文件夹,文件夹是命令行的参数。。应该是这样的:./script.sh dir1 dir2

但我有一个爱洛:

**./director.sh:第29行:`1':不是有效的标识符 **

我想计算从作为参数的dir1到命令行的文件数


有人能帮我吗?

这是主要错误:

for $1 in `ls`
  • $1
    不是有效的变量名
  • 改为这样做

    for file in *
    
    另外,引用变量:您希望保护脚本不受任何包含空格的文件名的影响

    if [ ! -d "$1" ]
    if [ -f "$file" ]
    
    代替本部分:

    a=0
    k=1
    for $1 in `ls`
    do
    if [ -f $1 ];  then
    a=`exp $a + 1`
    fi
    done
    
    这样做:

    a=$(ls "$1" | wc -l)
    
    如果您必须使用循环,请按如下方式进行更改:

    a=0
    for i in ${1}/*
    do
        if [ -f "$i" ];  then
            let a=a+1
        fi
    done
    echo "There are $a files"
    

    对*中的名称使用
    (避免
    $1
    ,因为它不会达到您期望的效果,避免解析
    ls
    的输出,因为如果文件名不都在可移植文件名字符集中,则会导致问题)。请注意,
    expr
    是执行加法的“标准”命令(不是
    exp
    ),但是Bash(和POSIX shell)提供了诸如
    ((a++)
    ($a+=1))之类的替代命令
    或该主题的大量变体。@JonathanLeffler对您的bash脚本的看法是正确的,但您可能只想看看
    diff
    ,它可以很好地工作:
    diff-q dir1 dir2 | sort
    我知道diff,但我需要使该脚本工作。我已经修改了代码,错误没有显示,但我仍然收到0文件,在我的文件夹中有4个文件。a=0,而[-f$1]do(($a+=1))done回显“有$a文件”