0

我有一个 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

谁能指出错误在哪里。

4

2 回答 2

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

特定解决方案

由于您的问题代表 ,因此您可以使用一些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 扩展将转换/path/*.txt为一个数组,其中包含与 jocker 形式匹配的所有文件名。

如果没有匹配表单的文件,VarLs将只包含jocker表单本身。

因此测试-e将纠正这一点:如果返回列表的第一个文件存在,则将列表 ( ${#VarLs[@]})中的元素数赋值给Var2else,赋值0Var2

于 2013-10-07T05:28:25.280 回答
2

谁能指出错误在哪里。

  • 周围不应该有空格=
  • 您可能想使用命令替换来捕获Var2.

尝试:

Var1=22
Var2=$(ls /stud_data/Input_Data/test3 | grep ".txt" | wc -l)

Var3=$(($Var1 + $Var2))
echo $Var3

此外,你还可以说

Var3=$((Var1 + Var2))
于 2013-10-07T05:07:34.617 回答