如何检查变量是否是bash中的有效十六进制颜色

时间:2012-01-01 02:37:20

标签: bash colors hex

我需要进行ha有效性测试,以查看用户的输入是否有效。我需要知道用户是否写了有效的十六进制颜色。

输入可能是“FFTTAA”,由于TT不是十六进制而无效。然后它需要中止,所以它不会写入文件。我的问题是我不知道如何挑出十六进制,因为它是字母和数字。这意味着简单的[0-9]不起作用。

read -p "Use light, normal or bold (ex. light): " ANS1; read -p "Write size in mm (ex. 1.8): " ANS2; read -p "Write color in hexadecimal (ex. FFFFFF): " ANS3;

sed -i '/SwipeLauncherButtonStyle {/,/text/c\
    SwipeLauncherButtonStyle {\
    font: \$FONT_FAMILY '"$ANS1"' '"$ANS2"'mm;\
    text-color: \#'"$ANS3"';' file.css

3 个答案:

答案 0 :(得分:4)

而不是[0-9],使用[0-9A-F](仅允许大写)或[0-9A-Fa-f](也允许使用小写)。例如:

if ! [[ $ANSI3 =~ ^[0-9A-F]{6}$ ]] ; then
    # abort . . .
fi

答案 1 :(得分:4)

在CSS中,A valid colour must have either 3 or 6 hexadecimal digits。您可以使用正则表达式检查:

if [[ ${ANS3} =~ ^([[:xdigit:]]{3}){1,2}$ ]]; then 
    echo "Valid"; 
else
    echo "Invalid"; 
fi

^标记字符串的开头,$标记结尾,{3}表示匹配前一个原子的三个([[:xdigit:]])和{1,2}前一个原子的一个或两个实例((...)),组合成3或6。

POSIX [[:xdigit:]]相当于[A-Fa-f0-9](处理大小写的情况)。

答案 2 :(得分:1)

十六进制数字可以是数字或A-F。

您只需要[0-9A-Fa-f]