'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
中的内容是否以 hu
或 ny
开头。
或者甚至使用正则表达式来获取文件。例如,以下将匹配 ttt/
目录中名称以 a
或 b
开头的所有文件:
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
如果我查找名称以 ca
或 bc
:
开头的目录,我会得到这个结果
$ find dirs -mindepth 1 -maxdepth 1 -type d -regex '.*/\(ca\|bc\).*'
dirs/bc23
dirs/ca24
我正在尝试编写一个 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
中的内容是否以 hu
或 ny
开头。
或者甚至使用正则表达式来获取文件。例如,以下将匹配 ttt/
目录中名称以 a
或 b
开头的所有文件:
for file in ttt/[ab]*
请注意,您还可以使用 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
如果我查找名称以 ca
或 bc
:
$ find dirs -mindepth 1 -maxdepth 1 -type d -regex '.*/\(ca\|bc\).*'
dirs/bc23
dirs/ca24