这个shell脚本中的错误是什么

时间:2014-08-20 12:00:59

标签: linux shell

我从未使用shell脚本,但现在我必须,这是我正在尝试做的事情:

#!/bin/bash
echo running the program 
./first 
var = ($(ls FODLDER |wc -l))    #check how many files the folder contains 
echo $var
if( ["$var" -gt "2"] #check if  there are more the 2file 
then ./second 
fi

scriopt在if声明中崩溃了。我怎么解决这个问题

2 个答案:

答案 0 :(得分:5)

许多:

var = ($(ls FODLDER |wc -l))

这是错误的,你不能在=周围有这些空格。

if( ["$var" -gt "2"]

您的(没有做任何事情,因此必须将其删除。此外,您需要[]周围的空格。

总之,这会更有意义:

#!/bin/bash
echo "running the program"
./first 
var=$(find FOLDER -maxdepth 1 -type f|wc -l) # better find than ls
echo "$var"
if [ "$var" -gt "2" ]; then
    ./second 
fi

注意:

  • 引用echo,特别是在处理变量时。
  • 查看在给定路径中查找文件的另一种方法。 Parsing ls is kind of evil
  • 缩进代码以提高可读性。

答案 1 :(得分:2)

编辑 script.bash 文件,如下所示:

#!/bin/env bash
dir="$1"

echo "running the program"
./first 
dir_list=( $dir/* )    # list files in directory
echo ${#dir_list[@]}     # count files in array
if (( ${#dir_list[@]} > 2 )); then # test how many files
  ./second 
fi

用法

script.bash /tmp/

您需要 learn bash以避免危险行为!

  1. 将目录作为命令行中的第一个参数传递(/tmp/→`$ 1)
  2. 使用glob创建一个包含给定目录中所有文件的数组(dir_list
  3. 计算数组中的项目(${#dir_list[@]}
  4. 使用arithmetic context测试项目数。