繁体   English   中英

这个shell脚本有什么错误

[英]What is the error in this shell script

我从未使用过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语句时崩溃。 我该如何解决

许多:

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时引用,特别是在处理变量时。
  • 查看在给定路径中查找文件的另一种方法。 解析ls是一种邪恶
  • 缩进代码以提高可读性。

如下编辑您的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/

讲解

您需要学习bash以避免危险的动作!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM