在循环中测试多个文件的存在

时间:2018-04-03 16:50:30

标签: bash if-statement command-line-arguments reduction command-line-parsing

假设传递了四个命令行参数的 bash 脚本。这些参数中的每一个都表示输入文件的路径和名称(即INF1INF2INF3INF4)。我想评估这四个输入文件中的每一个,如果它存在,并且 - 如果文件不存在,则退出脚本。

#!/bin/bash

# Assigning commandline arguments
INF1=$1
INF2=$2
INF3=$3
INF4=$4

# Check if input files exist
if [ ! -f $1 ]; then
    echo -ne " ERROR | File not found: $1\n"
    exit 1
fi
if [ ! -f $2 ]; then
    echo -ne " ERROR | File not found: $2\n"
    exit 1
fi
if [ ! -f $3 ]; then
    echo -ne " ERROR | File not found: $3\n"
    exit 1
fi
if [ ! -f $4 ]; then
    echo -ne " ERROR | File not found: $4\n"
    exit 1
fi

我认为这里有四个单独的if语句是不必要的,并且使用单个if语句可以实现相同的功能,并将其包装到循环中。如何减少这方面的代码?

2 个答案:

答案 0 :(得分:2)

脚本中的

#!/bin/bash

for v; do
if [ ! -f "$v" ]; then
    echo "ERROR | File not found: $v"
    exit 1
fi
done

答案 1 :(得分:1)

您可以声明一个数组并协调变量并循环遍历它。

ARRAY=()
ARRAY+=$1
ARRAY+=$2 ..

for i in "${arrayName[@]}"
do
   : 
   # do whatever on $i
done