Bash:我哪里出错了?

时间:2015-08-09 10:52:59

标签: bash if-statement svg sed

我无法让这个脚本工作,我试图根据文件名中的后缀为目录中的一组.svg文件着色某种颜色。在执行时,脚本不会产生错误,但文件不会改变颜色。

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

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

#!/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" *

1 个答案:

答案 0 :(得分:2)

替换所有两个字母的图案,如

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

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

和单字母图案

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

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

在上面使用了glob模式。在glob *匹配任意数量的字符,[bm]匹配列表中的任何一个字符,无论它是b还是m,而不是子字符串bm。< / p>