闇の光

读书笔记 经验感受

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

shell变量

  • 系统变量
  • shell常用的系统变量不多,,但却十分有用,特别是在做一些参数检测的时候。

    下面是shell常用的系统变量:

    表示方法描述
    $n$1 表示第一个参数,$2 表示第二个参数 ...
    $#命令行参数的个数
    $0当前程序的名称
    $?前一个命令或函数的返回码
    $*以"参数1 参数2 ... " 形式保存所有参数
    $@以"参数1" "参数2" ... 形式保存所有参数
    $$本程序的(进程ID号)PID
    $!上一个命令的PID
  • 环境变量
  • shell 环境变量是所有shell 程序都会接受的参数。shell程序运行时,都会接收一组变量,这组变量就是环境变量。常用的环境变量:

    名称描述
    PATH命令搜索路径,以冒号为分隔符.注意与DOS下不同的是, 当前目录不在系统路径里
    HOME用户home目录的路径名,是cd命令的默认参数
    COLUMNS定义了命令编辑模式下可使用命令行的长度
    EDITOR默认的行编辑器
    VISUAL默认的可视编辑器
    FCEDIT命令fc使用的编辑器
    HISTFILE命令历史文件
    HISTSIZE命令历史文件中最多可包含的命令条数
    HISTFILESIZE命令历史文件中包含的最大行数
    IFS定义SHELL使用的分隔符
    LOGNAME用户登录名
    MAIL指向一个需要SHELL监视其修改时间的文件.当该文件修改后, SHELL将发消息You hava mail给用户
    MAILCHECKSHELL检查MAIL文件的周期,单位是秒
    MAILPATH功能与MAIL类似.但可以用一组文件,以冒号分隔,每个文件后可跟一个问号和一条发向用户的消息
    SHELLSHELL的路径名
    TERM终端类型
    TMOUTSHELL自动退出的时间,单位为秒,若设为0则禁止SHELL自动退出
    PROMPT_COMMAND指定在主命令提示符前应执行的命令
    PS1主命令提示符
    PS2二级命令提示符,命令执行过程中要求输入数据时用
    PS3select的命令提示符
    PS4调试命令提示符
    MANPATH寻找手册页的路径,以冒号分隔
    LD_LIBRARY_PATH寻找库的路径,以冒号分隔

    如果你希望把你定义的变量让其他所有的shell程序都能使用,也就是定义新的环境变量。你只要使用export关键词就可以了。例如:

    export MY_NAME=Winter
    export PATH=/home/winter/bin:$PATH

    上面的程序中,第一行输出MY_NAME变量,第二行是在环境变量PATH中增加一个路径/home/winter/bin 。如果你希望这些设置在你登陆unix/linux都有效,你需要把他们加入到你的shell启动脚本中, 如果是使用bash
    ~/.bash_profile

    上面的系统变量中,我觉得比较有意思的是PS1这个变量,它是用来设置终端前面的提示符的。因此我们可以完全作一些个性化的设置,尤其是可以把它设置为其他的色彩,而不用总是一路黑白走到底。

    以下是一些设置PS1的例子:

    PS1="\s-\v\$"
    PS1="[\u@\h \W]\$"
    PS1="\[ \033[0;32;40m\u@\h:\w\$ \033[0m \]"
    PS1="\[\033[0;37;44m\u@\033[0;32;43m\h:\033[0;33;41m\w$\033[0m\]"
    PS1="\[\033[1;34;40m[\033[1;31;40m\u@\h:\w\033[1;34;40m]\033[1;37;40m $\033[0;37;0m\] "

    上面的例子中,"\s"表示Shell的名字,"\v"表示Shell的版本号。"\u"表示username,"\h"表示hostname,"\w"表示当前目录。

    而到了第三个例子,我们开始设置显示颜色。为了添加个人风格的彩色提示符,我们需要使用转义序列符。一个转义序列符是一个控制命令,它控制Shell执行某个特定的动作。一个转义序列符通常以ESC开始,在Shell中被记录为"^[",有时候也被常常记录为\033(因为ESC在ASCII编码中是27,八进制就被记录为033)。为了直接在Shell中输入一个转义序列符,一般会以“Ctrl+V”作为前导,也就是“Ctrl-v ESC”。

    “\033[0;32;40m”表示定义后面文本的颜色,“\033”表示启动一个转义序列,“[”定义开始颜色定义,“0”定义默认的字体颜色,其它部分稍后定义。“32”定义文本的前景色,这里 32表示绿色;“40”定义文本的背景色,40表示黑色。在字符串的最后定义了“ \033[0m”,它是用来恢复了默认的文本颜色设置,这样就只会得到一个彩色提示符,而不会影响命令和其输出的颜色显示(即黑底白字)。

    我们一共有8种字体颜色可供选择,它们分别是 30 (黑色)、31 (红色)、32 (绿色)、33 (黄色)、34 (蓝色)、35 ( 紫红色)、36 (青色)和37 (白色)。对于底色也有8种颜色可供选择,只需要将字体颜色的3修改为4即可,例如40、41、42、43、44、45、46、47。

    前面提到,转义序列符后面的“0”表示定义文本的颜色设置。除了颜色设置以外,还可以设置文本的其它属性。转义序列符后可以跟以下数值:0、1、22、4、24、25、7、27,分别定义颜色、黑体、非黑体、下画线、非下画线、闪烁、非闪烁、翻转、非翻转。

    以上均以bash为例,其他类型的shell可能有所不同。

    posted on 2008-03-05 14:44  taizi  阅读(438)  评论(0编辑  收藏  举报