文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>发个完整的 colorize() 函数: 给字符串上色 (转)

发个完整的 colorize() 函数: 给字符串上色 (转)

时间:2008-10-27  来源:ccjsj1

-(dearvoid@LinuxEden:Forum)-(~/void/bin/bash_functions.d)-
[$$=4035 $?=0] ; cat colorize
#!/bin/bash
# vi:set ts=8 sw=4 et sta:
#
# Author: Clark J. Wang <dearvoid at gmail.com>
#
# $Date: 2008-10-18 09:53:40 +0800 (Sat, 18 Oct 2008) $
# $HeadURL: svn://svnserver/svn/trunk/bin/bash_functions.d/colorize $
# $Revision: 1470 $
#
#--------------------------------------------------------------------#

function colorize()
{
    # the escape char
    eval local "cEsc=\$'\\033'"

    # foreground colors
    local  black=30
    local    red=31
    local  green=32
    local yellow=33
    local   blue=34
    local purple=35
    local   cyan=36
    local  white=37

    # background colors
    local  bg_black=40
    local    bg_red=41
    local  bg_green=42
    local bg_yellow=43
    local   bg_blue=44
    local bg_purple=45
    local   bg_cyan=46
    local  bg_white=47

    # other attributes
    local       none=0
    local       bold=1
    local underscore=4
    local      blink=5
    local    reverse=7
    local       hide=8

    # valid color names
    local aValidClrs
    aValidClrs=(black red green yellow blue purple cyan white)

    local bUnderscore=0 bBold=0 bHelp=0 bBgClr=0
    local bValidClr bListClr=0 bBlink=0 bForceClr=0
    local sClr cOpt
    local sFgClr sBgClr sNewLineOpt sText

    OPTIND=1
    OPTERR=0
    while getopts ":b:Bc:Fhklnu" cOpt "$@"; do
        case "$cOpt" in
            b|c)
            {
                [ "$cOpt" = b ] && bBgClr=1

                bValidClr=0
                for sClr in ${aValidClrs[@]}; do
                    if [ "$sClr" = "$OPTARG" ]; then
                        bValidClr=1
                        break
                    fi
                done

                if ((bValidClr)); then
                    if ((bBgClr)); then
                        sBgClr=bg_$OPTARG
                    else
                        sFgClr=$OPTARG
                    fi
                else
                    echo "Invalid color \`$OPTARG'" 1>&2
                    return 1
                fi
            };;

            B) bBold=1 ;;

            F) bForceClr=1 ;;

            h) bHelp=1 ;;

            k) bBlink=1 ;;

            l) bListClr=1 ;;

            n) sNewLineOpt='-n' ;;

            u) bUnderscore=1 ;;

            :|'?')
            {
                echo "Usage error. Run \`$FUNCNAME -h' for help." 1>&2
                return 1
            }
        esac
    done
    shift $((OPTIND - 1))

    if ((bListClr)); then
        echo "${aValidClrs[@]}"
        return 0
    fi

    if (($# == 0 || bHelp)); then
        echo "Usage:"
        echo "    $FUNCNAME [OPTION ...] TEXT ..."
        echo ""
        echo "Options:"
        echo "    -b COLOR      Background color"
        echo "    -B            Bold"
        echo "    -c COLOR      Foreground color"
        echo "    -F            Use color even STDOUT is not a TTY"
        echo "    -h            Help"
        echo "    -k            Blink (Your terminal may not support this)"
        echo "    -l            List valid colors"
        echo "    -n            Don't output newline"
        echo "    -u            Underscore"
        echo ""
        echo "Report bugs to $cEsc[1;35mClark J. Wang$cEsc[0m <dearvoid at gmail.com>"
        return 0
    fi

    # Text to colorize
    sText="$*"

    if [[ ! -t 1 && $bForceClr -eq 0 ]]; then
        eval "echo $sNewLineOpt \"\$sText\""
        return
    fi

    sClr=0
    if ((bUnderscore)); then
        sClr="$sClr;$underscore"
    fi
    if ((bBold)); then
        sClr="$sClr;$bold"
    fi
    if ((bBlink)); then
        sClr="$sClr;$blink"
    fi
    if [ -n "$sFgClr" ]; then
        eval "sClr=\"\$sClr;\$$sFgClr\""
    fi
    if [ -n "$sBgClr" ]; then
        eval "sClr=\"\$sClr;\$$sBgClr\""
    fi

    eval "echo $sNewLineOpt \"\$cEsc[${sClr}m\$sText\$cEsc[0m\""
}

#-- main ------------------------------------------------------------#

{
    if [[ $- != *i* ]]; then
        colorize "$@"
    fi
}
-(dearvoid@LinuxEden:Forum)-(~/void/bin/bash_functions.d)-
[$$=4035 $?=0] ; ./colorize
Usage:
    colorize [OPTION ...] TEXT ...

Options:
    -b COLOR      Background color
    -B            Bold
    -c COLOR      Foreground color
    -F            Use color even STDOUT is not a TTY
    -h            Help
    -k            Blink (Your terminal may not support this)
    -l            List valid colors
    -n            Don't output newline
    -u            Underscore

Report bugs to Clark J. Wang <dearvoid at gmail.com>
-(dearvoid@LinuxEden:Forum)-(~/void/bin/bash_functions.d)-
[$$=4035 $?=0] ; ./colorize -c red -b blue hello world
hello world
-(dearvoid@LinuxEden:Forum)-(~/void/bin/bash_functions.d)-
[$$=4035 $?=0] ; bye
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载