我有一个bash脚本,我试图找出目录中的文件数量并对其执行添加操作。
但是在做同样的事情时,我得到的错误如下:
admin> ./fileCount.sh
1
./fileCount.sh: line 6: 22 + : syntax error: operand expected (error token is " ")
我的脚本如下所示:
#!/usr/bin/bash
Var1=22
Var2= ls /stud_data/Input_Data/test3 | grep ".txt" | wc -l
Var3= $(($Var1 + $Var2))
echo $Var3
任何人都可以指出错误在哪里。
答案 0 :(得分:3)
由于@devnull已回答问题指出错误在哪里,
还有一些想法:
要进行此类浏览,有一个非常强大的命令find
,可让您以递归的方式找到,正是您正在搜索的内容:
Var2=`find /stud_data/Input_Data/test3 -name '*.txt' | wc -l`
如果你不想这是递归的:
Var2=`find /stud_data/Input_Data/test3 -maxdepth 1 -name '*.txt' | wc -l`
如果您只想要文件(意思是没有符号链接,也没有目录)
Var2=`find /stud_data/Input_Data/test3 -maxdepth 1 -type f -name '*.txt' | wc -l`
依此类推......请阅读手册页:man find
。
正如您的问题代表bash,您可以使用一些 bashism 来加快速度:
#!/bin/bash
Var1=22
VarLs=(/stud_data/Input_Data/test3/*.txt)
[ -e $VarLs ] && Var2=${#VarLs[@]} || Var2=0
Var3=$(( Var1 + Var2 ))
echo $Var3
# Uncomment next line to see more about current environment
# set | grep ^Var
bash扩展将在包含与jocker表单匹配的所有文件名的数组中翻译/path/*.txt
。
如果没有与表单匹配的文件,VarLs
将仅包含jocker表单。
因此测试-e
将更正此问题:如果返回列表的第一个文件存在,则将列表中的元素数量(${#VarLs[@]}
)分配给Var2
否则,分配0
至Var2
。
答案 1 :(得分:2)
任何人都可以指出错误在哪里。
=
周围不应有空格。Var2
中的结果。尝试:
Var1=22
Var2=$(ls /stud_data/Input_Data/test3 | grep ".txt" | wc -l)
Var3=$(($Var1 + $Var2))
echo $Var3
此外,你也可以说
Var3=$((Var1 + Var2))