第一部分:Linux命令行
    《Linux命令行与shell脚本编程大全》 第一章:初识Linux shell
    《Linux命令行与shell脚本编程大全》 第二章:走进shell
    《Linux命令行与shell脚本编程大全》 第三章:基本的bash shell命令
    《Linux命令行与shell脚本编程大全》 第四章:更多的bash shell命令
    《Linux命令行与shell脚本编程大全》 第五章:使用Linux环境变量
    《Linux命令行与shell脚本编程大全》 第六章:理解Linux文件权限
    《Linux命令行与shell脚本编程大全》 第七章:管理文件系统
    《Linux命令行与shell脚本编程大全》 第八章:安装软件程序
    《Linux命令行与shell脚本编程大全》 第九章:使用编辑器

    第二部分:shell脚本编程基础
    《Linux命令行与shell脚本编程大全》 第十章:构建基本脚本
    《Linux命令行与shell脚本编程大全》 第十一章:使用结构化命令
    《Linux命令行与shell脚本编程大全》 第十二章:更多的结构化命令
    《Linux命令行与shell脚本编程大全》 第十三章:处理用户输入
    《Linux命令行与shell脚本编程大全》 第十四章:呈现数据
    《Linux命令行与shell脚本编程大全》 第十五章:控制脚本

    第三部分:高级shell编程
    《Linux命令行与shell脚本编程大全》 第十六章:创建函数
    《Linux命令行与shell脚本编程大全》 第十七章:图形化桌面上的脚本编程
    《Linux命令行与shell脚本编程大全》 第十八章:初识sed和gawk
    《Linux命令行与shell脚本编程大全》 第十九章:正则表达式
    《Linux命令行与shell脚本编程大全》 第二十章:sed进阶
    《Linux命令行与shell脚本编程大全》 第二十一章:gawk进阶
    《Linux命令行与shell脚本编程大全》 第二十二章:使用其他shell

    第四部分:高级shell脚本编程主题
    《Linux命令行与shell脚本编程大全》 第二十三章:使用数据库
    《Linux命令行与shell脚本编程大全》 第二十四章:使用Web
    《Linux命令行与shell脚本编程大全》 第二十五章:使用E-mail
    《Linux命令行与shell脚本编程大全》 第二十六章:编写脚本实用工具
    《Linux命令行与shell脚本编程大全》 第二十七章:shell脚本编程进阶


    第五章:使用Linux环境变量


    环境变量(environment variables)

    1.全局变量

    2.局部变量


    全局变量

    可见性:对shell以及shell创建的子shell都可见

    系统环境变量一律使用大写字母

    printenv(查看全局环境变量)

    echo $变量名(查看此变量值)


    局部变量

    可见性:只对创建他们的shell可见

    无法直接显示局部变量

    set(显示为某个特定进程设置的所有环境变量,包括全局变量,剩下的为局部变量)


    设置环境变量

    设置局部环境变量

    通过等号赋值。等号两边不可加空格

    设置全局环境变量

    export 变量(之后就可在当前shell以及其子shell中使用)


    删除环境变量

    unset 变量名(不要加$)

    unset只能删除局部环境变量,父shell中的变量依然有效


    默认shell环境变量

    1.bash shell与Unix Bourne shell兼容的环境变量

    变量 描述
    CDPATH 冒号分隔的目录列表,作为cd命令的搜索路径
    HOME 当前用户的主目录
    IFS shell用来分隔文本字符串的一系列字符
    MAIL 当前用户收件箱的文件名;bash shell会检查这个文件看有没有新邮件
    MAILPATH 冒号分隔的当前用户收件箱的文件名列表;bash shell会检查列表中的每个文件来看有没有新邮件
    OPTARG getopts命令处理的最后一个选项参数值
    OPTIND getopts命令处理的最后一个选项参数的索引号
    PATH 冒号分隔的shell查找命令的目录列表
    PS1 shell命令行界面的主提示符
    PS2 shell命令行界面的副提示符


    bash shell环境变量

    变量 描述
    BASH 运行当前shell实例的全路径名
    BASH_ALIASES 当前已设置别名的关联数组
    BASH_ARGC 含有传给子函数或shell脚本的参数总数的可变数组
    BASH_ ARGV 含有传给子函数或shell脚本的参数可变数组
    BASH_CMDS shell执行过的命令的所在位置的关联数组
    BASH_COMMAND shell正在执行的命令或马上就执行的命令
    BASH_ENV 设置的话,每个bash脚本会在运行前先尝试运行一下这个变量定义的启动文件
    BASH_EXECUTION_STRING 通过bash -c选项传递过来的命令
    BASH_LINENO 含有当前执行的shell函数在源码中行号的可变数组
    BASH_REMATCH 含有模式和它们通过正则表达式比较运算符=~匹配到的子模式的只读可变数组
    BASH_SOURCE 含有当前正在执行的shell函数的源码文件名的可变数组
    BASH_SUBSHELL 当前子shell的嵌套级别,初始=0
    BASH_VERSION 当前运行的bash shell的版本号
    BASH_VERSINFO 含有当前运行的bash shell的主版本号和次版本号的可变数组
    BASH_XTRACEFD 若设置了有效的文件描述符(0,1,2),则'set -x'调试选项声称的跟踪输出可被重定向;通常用来将跟踪输出分出到一个文件中
    BASHOPTS 当前使能的bash shell选项列表
    BASHPID 当前bash进程PID
    COLUMNS 当前bash shell实例所用终端的宽度
    COMP_CWORD 含有当前光标位置的COMP_WORDS变量的索引值
    COMP_LINE 当前命令行
    COMP_POINT 当前光标位置相当于当前命令起始位置的索引
    COMP_KEY 用来调用shell函数补全功能的最后一个键值
    COMP_TYPE 代表尝试调用补全shell函数的补全类型的整数值
    COMP_WORDBREAKS Readline库里做单词补全的词分隔字符
    COMP_WORDS 含有当前命令行所有词的可变数组
    COMPREPLY 含有由shell函数生成可能的填充字的可变数组
    DIRSTACK 含有目录栈当前内容的可变数组
    EMACS 设置为t时,表明emacs shell缓冲区正则工作而行编辑不能工作
    EUID 当前用户的有效用户ID
    FCEDIT 供fc命令用的默认编辑器
    FIGNORE 冒号分隔的做文件名补全时要忽略的后缀名列表
    FUNCNAME 当前执行的shell函数的名称
    GLOBIGNORE 定义了文件名展开时忽略的文件名集合的冒号分隔模式列表
    GROUPS 含有当前用户属组列表的可变数组
    histchars 控制历史记录展开的字符,最多可有3个字符
    HISTCMD 当前命令在历史记录中的位置
    HISTCONTROL 控制哪些命令留在历史记录列表中
    HISTFILE 保存shell历史记录列表的文件名(默认为.bash_history)
    HISTFILESIZE 最多在历史文件中存多少行
    HISTIGNORE 冒号分隔的用来决定哪些命令不存进历史文件模式列表
    HISTSIZE 最多在历史文件中存多少条命令
    HOSTFILE shell在补全主机名时读取的文件的名称
    HOSTNAME 当前主机的名称
    HOSTTYPE 当前运行bash shell的机器
    IGNOREEOF shell在退出前必须收到连续的EOF字符的数量。如果没有设定,默认为1
    INPUTRC Readline初始化文件名(默认是.inputrc)
    LANG shell语言环境分类
    LC_ALL 定义一个语言环境覆盖LANG变量
    LC_COLLATE 设置对字符串排序时用的对照表顺序
    LC_CTYPE 决定着在文件名展开和模式匹配时用字符如何解释
    LC_MESSAGES 决定解释前置美元符($)的双引号字符串的语言环境设置
    LC_MUNERIC 决定着格式化数字时的语言环境设置
    LINENO 当前执行脚本的行号
    LINES 定义了终端上可见的行数
    MACHTYPE 用“cpu-公司-系统”格式定义系统类型
    MAILCHECK shell查看新邮件的频率(以秒为单位,默认值=60)
    OLDPWD shell之前的工作目录
    OPTERR 设置为1时,bash shell会显示getopts命令产生的错误
    OSTYPE 定义了shell运行的操作系统
    PIPESTATUS 含有 前端进程的退出状态列表的可变数组
    POSIXLY_CORRECT 设置的话,bash会以POSIX模式启动
    PPID bash shell父进程的PID
    PROMPT_COMMAND 设置了的话,在命令行主提示符显示之前会执行这条命令
    PROMPT_DIRTRIM 用来定义当启用了\w或\W提示符字符串转义时显示的尾部目录名数。删除的目录名会用一组英文句点替换
    PS3 select命令的提示符
    PS4 如果使用了bash的-x参数,在命令行显示之前显示的提示符
    PWD 当前工作目录
    RANDOM 返回一个0~32767的随机数;对其赋值可作为随机数生成器的种子
    REPLY read命令的默认变量
    SECONDS 自从shell启动到现在的秒数;对其赋值将会重置计数器
    SHELL bash shell的全路径名
    SHELLOPTS 冒号分隔的打开的bash shell选项列表
    SHLVL shell的级别;每次启动一个新bash shell,值增加1
    TIMEFORMAT 指定了shell显示时间值的格式
    TMOUT select和read命令在没输入的情况下等待多久(以秒为单位),默认值为0,表示无限长
    TMPDIR bash shell创建临时文件的目录名
    UID 当前用户的真实用户ID

    不是所有默认环境变量都会在执行set命令时列出,因为有些变量没有被赋值


    设置PATH环境变量

    通常将“.”也加入PATH中,这样确实方便很多!

    PATH=$PATH:.


    定位系统环境变量

    启动bash shell有三种方式

    1.登录时当做默认登录shell

    2.作为非登录shell的交互式shell

    3.作为运行脚本的非交互shell



    登录shell

    会从4个不同的启动文件里读取命令,顺序依次为:

    /etc/profile

    $HOME/.bash_profile

    $HOME/.bash_login

    $HOME/.profile

    其中/etc/profile是系统上默认的bash shell的主启动文件,另外三个是用户专有

    $HOME.profile中会检查系统上有没有$HOME/.bashrc文件,如果有则执行


    交互式shell

    不会访问/etc/profile,而回去检查$HOME/.bashrc

    .bashrc作用:查看/etc目录下共用的bashrc;为用户提供一个定制自己的命令别名和私有脚本函数的地方

    /etc/profile会设置一些环境变量,但是没有执行export

    /etc/profile也会执行位于/etc/profile.d目录下的那些应用专属的启动文件


    非交互式shell

    系统执行shell脚本时用这种shell

    每次系统上运行脚本时会检查BASH_ENV这个变量,如果有赋值,则先执行这个变量中定义的启动文件,Linux默认没有设置此变量



    可变数组

    环境变量可作为数组使用

    定义一个数组

    $ mytest=(one two three four five)

    尝试打印这个数组

    $ echo $mytest

    只输出了第一个元素

    one


    如果想打印整个数组

    $ echo ${mytest[*]}

    one two three four five


    打印指定的元素

    $ echo ${mytest[2]}

    three


    unset删除数组的某一项(实际上更像是把它设置为null,但是元素还在)

    shell@android:/ $ unset mytest[2]
    unset mytest[2]

    打印数组的时候看不见three了
    shell@android:/ $ echo ${mytest[*]}
    echo ${mytest[*]}
    one two four five

    打印2号元素的时候,发现是空的,并不是four
    shell@android:/ $ echo ${mytest[2]}
    echo ${mytest[2]}

    shell@android:/ $ echo ${mytest[3]}
    echo ${mytest[3]}
    four
    shell@android:/ $ unset mytest
    unset mytest

    同样,打印整个数组时,数组还在,值都不见了
    shell@android:/ $ echo ${mytest[*]}
    echo ${mytest[*]}


    使用命令别名

    alias -p(查看已定义的别名)

    其余alias用法见 #1



    1. 《Unix & Linux 大学教程》 - 第十三章 学习笔记 使用shell:命令和定制



    转贴请保留以下链接

    本人blog地址

    http://su1216.iteye.com/

    http://blog.csdn.net/su1216/