通过shell脚本

时间:2016-03-01 09:48:36

标签: bash shell sh

我正在尝试在shell脚本中使用if条件来检查工作目录中是否存在某些文件(以类似名称开头)。 我的问题是我有多个文件即。我工作目录中的“A1.txt”,“A2.txt”,“A3.txt”等。 现在我的问题是,有没有办法检查文件名字符串部分的文件。因此,如果脚本找到至少一个名称以“A”开头的文件,则会打印出找不到文件名的文件,文件名以“A”开头,因此不打印。  我的尝试如下:

if [ -f "A*.txt" ];
then
echo "Files exist."
else
echo "Files do not exist"
fi

但它不起作用并返回“太多参数”。有出路吗?

2 个答案:

答案 0 :(得分:2)

在BASH中你可以使用:

( shopt -s nullglob; set -- A*.txt; (( $# > 0 )) ) &&
    echo "Files exist." || echo "Files don't exist"

当找到匹配的文件时,它将以0退出并打印:

Files exist.

当它找不到任何具有给定glob模式的匹配文件/目录时,它将以1退出并打印:

Files don't exist

<强>解释

    如果shopt -s nullglob 没有匹配的文件,
  • glob会导致shell无提示失败
  • set --为位置参数$1,$2,$3等分配给定参数。
  • $#是位置参数的数量。如果找到任何匹配的文件,它将被设置为大于零
  • ((...))用于bash
  • 中的算术评估
  • (..)为上述命令创建一个子shell,以便当前shell的env不受影响

答案 1 :(得分:1)

这可能是一种方式:

#!/bin/bash

check=`ls A*.txt 2> /dev/null`

if [ ! -z "${check}" ];
then
echo "Files exist."
else
echo "Files do not exist"
fi

然后你可以使用正则表达式来证明check变量,如果你需要只得到带有数字的文件,你可以做一些像check = ls A[1-9]*.txt

此致

克劳迪奥