我试图编写一个bash脚本,它循环遍历给定文件夹中两个字符串之一的目录。我写了以下内容:
for aSubj in /wherever/*
if [ [ -d $aSubj ] && [ [ $aSubj == hu* ] || [ $aSubj == ny* ] ] ]; then
.
.
fi
done
当我尝试运行此操作时,如果'如果':语法错误接近意外令牌,则会出现语法错误' if'
有谁可以指出我哪里出错了?
答案 0 :(得分:1)
第一行应该是
for aSubj in /wherever/*; do
答案 1 :(得分:1)
如果您想提及多个条件,请将它们与( )
:
$ 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
中的内容是以hu
还是ny
开头。
甚至可以使用正则表达式来获取文件。例如,以下内容将匹配名称以ttt/
或a
开头的b
目录中的所有文件:
for file in ttt/[ab]*
请注意,您也可以使用process substitution并find
包含正则表达式(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
如果我查找名称以ca
或bc
开头的目录,我会得到此结果:
$ find dirs -mindepth 1 -maxdepth 1 -type d -regex '.*/\(ca\|bc\).*'
dirs/bc23
dirs/ca24