'if' 的多个条件

multiple conditions on 'if'

我正在尝试编写一个 bash 脚本,该脚本循环遍历以给定文件夹中的两个字符串之一开头的目录。我写了以下内容:

for aSubj in /wherever/*
    if [ [ -d $aSubj ] && [ [ $aSubj == hu* ] || [ $aSubj == ny* ] ] ]; then
        .
        .
    fi
done

当我尝试 运行 时,我在 'if' 行出现语法错误:意外标记附近出现语法错误 'if'

谁能指出我哪里错了?

第一行应该是

for aSubj in /wherever/*; do

如果要提及多个条件,只需将它们嵌套在( ):

$ d=23
$ ( [ $d -ge 20 ] && [ $d -ge 5 ] ) || [ $d -ge 5 ] && echo "yes"
yes

但是,在这种情况下,您可能希望使用 Check if a string matches a regex in Bash script 中所述的正则表达式:

[[ $aSubj =~ ^(hu|ny)* ]]

这将检查变量 $aSubj 中的内容是否以 huny 开头。

或者甚至使用正则表达式来获取文件。例如,以下将匹配 ttt/ 目录中名称以 ab 开头的所有文件:

for file in ttt/[ab]*

请注意,您还可以使用 with find containing a regular expression (samples in How to use regex in file find):

while IFS= read -r file
do
   # .... things
done < <(find your_dir -mindepth 1 -maxdepth 1 -type d -regex '.*/\(hu\|ny\).*')

例如,如果我有以下目录:

$ ls dirs/
aa23  aa24  ba24  bc23  ca24

如果我查找名称以 cabc:

开头的目录,我会得到这个结果
$ find dirs -mindepth 1 -maxdepth 1 -type d -regex '.*/\(ca\|bc\).*'
dirs/bc23
dirs/ca24