Bash 巴什:我在这方面哪里出了问题?

Bash 巴什:我在这方面哪里出了问题?,bash,if-statement,svg,sed,Bash,If Statement,Svg,Sed,我很难让这个脚本正常工作,我正试图根据文件名中的后缀将目录中的一组.svg文件着色为某种颜色。在执行时,脚本不会产生任何错误,但文件在颜色方面保持不变 编辑:文件用于基于ASCII字符的平铺集,文件名的结构如下:“a^[bb].svg”,克拉是可选的,表示平铺中的字符是大写字母,而方括号之间的字符串表示平铺中字符的颜色 以下是我正在尝试使用的更新的脚本: #!/bin/bash for a in $(find *) do if [[ $a = *bm* ]] then sed -i -e "s

我很难让这个脚本正常工作,我正试图根据文件名中的后缀将目录中的一组
.svg
文件着色为某种颜色。在执行时,脚本不会产生任何错误,但文件在颜色方面保持不变

编辑:文件用于基于ASCII字符的平铺集,文件名的结构如下:“
a^[bb].svg
”,克拉是可选的,表示平铺中的字符是大写字母,而方括号之间的字符串表示平铺中字符的颜色

以下是我正在尝试使用的更新的脚本:

#!/bin/bash

for a in $(find *) do
if [[ $a = *bm* ]]
then
sed -i -e "s/fill:#FFFFFF/fill:#FF55FF/i" -e "s/font-size:75px/font-size:75px;fill:#FF55FF/" $a
elif [[ $a = *bb* ]] then
sed -i -e "s/fill:#FFFFFF/fill:#5555FF/i" -e "s/font-size:75px/font-size:75px;fill:#5555FF/" $a
elif [[ $a = *bc* ]] then
sed -i -e "s/fill:#FFFFFF/fill:#55FFFF/i" -e "s/font-size:75px/font-size:75px;fill:55FFFF/" $a
elif [[ $a = *br* ]] then
sed -i -e "s/fill:#FFFFFF/fill:#AA5500/i" -e "s/font-size:75px/font-size:75px;fill:#AA5500/" $a
elif [[ $a = *b* ]] then
sed -i -e "s/fill:#FFFFFF/fill:#0000AA/i" -e "s/font-size:75px/font-size:75px;fill:#0000AA/" $a
elif [[ $a = *c* ]] then
sed -i -e "s/fill:#FFFFFF/fill:#00AAAA/i" -e "s/font-size:75px/font-size:75px;fill:#00AAAA/" $a
elif [[ $a = *dgr* ]] then
sed -i -e "s/fill:#FFFFFF/fill:#555555/i" -e "s/font-size:75px/font-size:75px;fill:#555555/" $a
elif [[ $a = *g* ]] then
sed -i -e "s/fill:#FFFFFF/fill:#00AA00/i" -e "s/font-size:75px/font-size:75px;fill:#00AA00/" $a
elif [[ $a = *lgr* ]] then
sed -i -e "s/fill:#FFFFFF/fill:#AAAAAA/i" -e "s/font-size:75px/font-size:75px;fill:#AAAAAA/" $a
elif [[ $a = *m* ]] then
sed -i -e "s/fill:#FFFFFF/fill:#AA00AA/i" -e "s/font-size:75px/font-size:75px;fill:#AA00AA/" $a
elif [[ $a = *o* ]] then
sed -i -e "s/fill:#FFFFFF/fill:#FF5555/i" -e "s/font-size:75px/font-size:75px;fill:#FF5555/" $a
elif [[ $a = *r* ]] then
sed -i -e "s/fill:#FFFFFF/fill:#AA0000/i" -e "s/font-size:75px/font-size:75px;fill:#AA0000/" $a
elif [[ $a = *u* ]] then
sed -i -e "s/fill:#FFFFFF/fill:#FFFF55/i" -e "s/font-size:75px/font-size:75px;fill:#FFFF55/" $a
fi
done
sed -i -e "s/monospace/courier/gi" *

替换所有两个字母模式,如

if [ $a == "*[bm]*" ]; then

和单字母模式

if [ $a == "*[m]*" ]; then


在上面的例子中,使用了glob模式。在glob中,
*
匹配任意数量的字符,
[bm]
匹配列表中的任意一个字符,无论它是
b
还是
m
,但不匹配子字符串
bm
=
这里不需要使用
=
,您可以使用
[$a=*[bm]*]]]]
我想他也需要
*bm*
(无括号),因为
*[bm]*
始终会匹配任何与他稍后测试的模式
*[m]*
匹配的文件。@chepner认为您是正确的,没有看到最后一个m。
。/dev/color.sh:line 17:条件表达式中的语法错误。/dev/color.sh:line 17:靠近“%]”的语法错误。../dev/color.sh:line 17:`elif[[$a=*b*]'
对不起,忘了在末尾添加
]
。请立即尝试。检查我的更新。不要将
==
[
一起使用。它不能保证能与
[
的所有实现一起使用,如果添加了,您可能拥有更高的
[[
可用。您的意思是您的文件名在文件名中有文字括号吗,如
a[b].svg
?您介意发布一小部分文件名和预期的替换吗?@gboffi以下是
v
目录的
ls
v.svg v[bb].svg[bm].svg[c].svg].svg[m].svg[r].svg v^[bb].svg v^[bm].svg v^[c].svg v^[g].svg v^[m].svg v^[r].svg v[b].svg v[bc].svg v[br].svg v[dgr].svg v[lgr].svg[o].svg v[y].svg v^[bc].svg v^[br].svg v^[dgr].svg v^[o].svg
if [ $a == "*[m]*" ]; then
if [[ $a = *m* ]]; then