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文件”