bash shell 通过Escape序列设置文字格式

为了命令行输出更加有辨识度,shell脚本需要对输出进行格式化。例如,借助escape序列,设定文字的颜色;通过其他ascii控制字符\r,\b等,控制文字的输出,等等。

Escape序列

escape序列是一个相当古老的ANSI标准,基本所有的Unix/Linux terminal都支持escape序列。escape序列以八进制\033即ESC的ASCII码开头,主要用来控制字体的颜色和其他特征如闪烁,下划线等。例如

  • 表示粗体是 \033[1m
  • 表示字体黄色是 \033[33m
  • 表示红色背景是 \033[41m

举例1

  1. tput cols 发现当前terminal的列数。tput工具设置或查询terminal的信息。
  2. \e[32m 设置文字绿色。\e[31m 设置文字红色。\e[6C 光标向前跳过6个字符。
  3. echo支持-e选项,\033可写作\e。

    #!/bin/bash
    print_header() {
        local cols=$(tput cols)
        local word=">>> $1 <<<"
        local skip=6
    
        echo -n -e "\e[32m"
        local x; for ((x=0; $x<$cols; x++)); do
            echo -n "~"
        done
        echo -e "\r\e[${skip}C\e[31m${word}\n\b\e[0m"
    }
    print_header "第一步"
    echo "some ..."
    print_header "第二步"
    echo "another ..."
    

运行结果如下
运行结果

举例2

#!/bin/bash
print_header() {
    local width=$(tput cols)
    local word=">>> $1 <<<"
    local skip=4
    local x=0

    echo -n -e "\e[32;4m"
    while (($x < 2 * $width)); do
        echo -n " "
        ((x++))
        [[ $x == $width ]] && echo
    done
    echo -e "\r\e[${skip}C${word}\n\b\e[0m"
}
print_header "第一步"
echo "some ..."
print_header "第二步"
echo "another ..."

运行结果如图所示
运行结果2

参考文献

  1. http://www.unixwerk.eu/unix/ansicodes.html
  2. https://baike.baidu.com/item/ASCII/309296
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值