centos-打印有颜色的字符

#!/bin/bash

#定义展示使用方式
USAGE="
命令:
    css [-c red] [-b white] [--bold] [--underline] [--reverse] [--blink] msg1...
选项:
    -b, --background 指定背景颜色
    -c, --color    指定字体颜色
        --debug    打印调式信息
        --underline    下划线
        --help    帮助
        --reverse     反显
        --blink    闪烁
        --bold     加粗
颜色:
    black|red|green|yellow|blue|purple|pink|cyan|white|grey
样式:
    \e[31m红色\e[0m \e[32m绿色\e[0m \e[33m黄色\e[0m \e[34m蓝色\e[0m \e[35m紫色\e[0m \e[36m天蓝\e[0m \e[37m白色\e[0m
    
    \e[41;30m红底\e[0m \e[42;30m绿底\e[0m \e[43;30m黄底\e[0m \e[44;30m蓝底\e[0m \e[45;30m紫底\e[0m \e[46;30m天蓝\e[0m \e[47;30m白底\e[0m
"

#控制选项
option(){
    case $1 in
    -b|--background)    echo 4 ;;
    -c|--color)         echo 3 ;;
    --bold)             echo 1 ;;
    --underline)         echo 4 ;;
    --blink)         echo 5 ;;
    --reverse)         echo 7 ;;
    *)            echo "" ;;
    esac
}

#ANSI颜色控制码
color(){
    type=`option $1`
    case $2 in
    #0:黑色|1:红色|2:绿色|3:黄色|4:蓝色|5:紫色|6:天蓝|7:白色
    black)        echo ${type}0 ;;
    red)        echo ${type}1 ;;
    green)         echo ${type}2 ;;
    yellow)        echo ${type}3 ;;
    blue)        echo ${type}4 ;;
    purple|pink)     echo ${type}5 ;;
    cyan)         echo ${type}6 ;;
    white|gray)      echo ${type}7 ;;
    *)        echo ""          ;;
    esac
}

log(){
    [[ $1 == on ]] && echo -e "\e[32m[ debug ]\e[0m$2"
}

main(){
    #echo "共传入: $#个参数,参数为: $*"
    #getopt格式化参数
    #set -- 效果是将命令行参数替换成set命令的参数值
    #eval 命令用于将其后的内容作为单个命令读取和执行,这里用于处理getopt命令生成的参数的转义字符

    #-o或--options选项后面接可接受的短选项,如ab:c::,表示可接受的短选项为-a -b -c,其中-a选项不接参数,-b选项后必须接参数,-c选项的参数为可选的
    #-l或--long选项后面接可接受的长选项,用逗号分开,冒号的意义同短选项。
    ARGS=`getopt -o b:c: -l background:,color:,debug,underline,help,reverse,blink,bold -- "$@"`
    if [ $? != 0 ]; then
        echo "Terminating..."
        exit 1
    fi

    #echo $ARGS
    #将规范化后的命令行参数分配至位置参数($1,$2,...)
    eval set -- "${ARGS}"
    #echo $*
    
    code=""
    debug=""
    #解析选项
    while true ;do
        case $1 in
        -b|--background|-c|--color)
            code="`color $1 $2`;${code}"
            shift 2;;
        --debug)
            debug=on
            shift ;;
        --bold|--underline|--blink|--reverse)
            code="`option $1`;${code}"
            shift ;;
        --help)
            echo -e "${USAGE}"
            exit 1 ;;
        --)
            shift;
            break ;;
        *)
            echo "$1 is not an option";
            exit 1 ;;
        esac
    done
    
    log $debug 生成的颜色代码为:${code}
    code=${code%%;}
    code=${code##;}
    log $debug 截取后颜色代码为:${code}
    
    #解析参数
    msg="$*"
    log $debug 原始参数:${msg}
    [[ -n ${code} ]] && msg="\e[${code}m${msg}\e[0m"
    echo -e "[ 样式 ]"${msg}
    echo "[ 代码 ]"${msg}
    echo
}

main $*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值