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