Ted's Blog

Happy coding

shell用到ANSI控制码汇总

我们在编写shell脚本时,如果要实现某种特殊功能(只对当前shell起作用),就需要ANSI的控制码。

比如我要让终端下字符颜色改换为绿色的,可以用
  root$ echo -e "\033[40;32"
要偷懒,将当前光标移动到第3行第1列的地方,用到
  root$ echo -ne "\33[3;1H"

上面这些都是实际的例子,要应用好还要学好ANSI控制码的相关代码,如下:

\33[30m -- \33[37m  设置前景色
\33[40m -- \33[47m  设置背景色
\33[nA  光标上移n行
\33[nB  光标下移n行
\33[nC  光标右移n行
\33[nD  光标左移n行
\33[K   清除从光标到行尾的内容
\33[s   保存光标位置
\33[u   恢复光标位置
\33[y;xH设置光标位置
\33[?25l  隐藏光标
\33[?25h  显示光标
\33[2J  清屏
\33[0m  关闭所有属性
\33[1m  设置高亮度
\33[4m  下划线
\33[5m  闪烁
\33[7m  反显
\33[8m  消隐

注意:使用不同的shell,也会用到不同的转义的,看下面的例子:

/home/lee#echo "\\033[32mddd"
ddd
/home/lee#
/home/lee#bash
/home/lee#echo "\\033[33maddd"
\033[33maddd
/home/lee#exit
/home/lee#echo "\\033[34maddd"
addd
/home/lee#echo $0
-ksh
/home/lee#

一句话shell

下载连续的文件

for num in `seq -w  1 1 21`; do wget http://thns.tsinghua.edu.cn/thnsebooks/ebook73/$num.pdf; done

在当前目录下(排除0618和Mail目录)查找以a开头的文件或目录

find . \( -path './0618*' -o -path './Mail*' \) -a -prune -o -name "a*" -print

在当前目录的c或h文件中查找字符串

find . "*.[ch]" -exec grep -nH "main" {} \;

Ubuntu下列出system-config-printer-gnome包所安装的文件占的空间

du -cxh $(file `dpkg -L system-config-printer-gnome`|grep -v directory|awk -F: '{print $1}')