Linux Shell变量

来源:互联网 发布:怎么启用windows aero 编辑:程序博客网 时间:2024/05/17 23:52

转自:http://www.xxlinux.com/linux/article/development/shell/2006-07-16/2802.html


在Shell中有三种变量:系统变量,环境变量,用户变量。其中用户变量在编程过程中使用最多,系统变量在对参数判断和命令返回值判断会使用,环境变量主要是在程序运行的时候需要设置。

1 系统变量

Shell常用的系统变量并不多,但却十分有用,特别是在做一些参数检测的时候。下面是Shell常用的系统变量表示方法描述$n$1 表示第一个参数,$2 表示第二个参数 ...$#命令行参数的个数$0当前程序的名称$?前一个命令或函数的返回码$*以"参数1 参数2 ... " 形式保存所有参数$@以"参数1" "参数2" ... 形式保存所有参数$$本程序的(进程ID号)PID$!上一个命令的PID其中使用得比较多得是 $n $# $0 $? ,看看下面的例子: BeautifierPlugin Error: Unable to handle "bash" syntax.
#!/bin/sh#This file is used to explain the shell system variable.echo "the number of parameter is $# ";echo "the return code of last command is $?";echo "the script name is $0 ";echo "the parameters are $* ";echo "\$1 = $1 ; \$2 = $2 ";

下面是运行结果:

BeautifierPlugin Error: Unable to handle "bash" syntax.

-bash-2.05b$ ./chapter2.1.sh winter stlchinathe number of parameter is 2 the return code of last command is 0the script name is ./chapter2.1.sh the parameters are winter stlchina $1 = winter ; $2 = stlchina 

这个例子太简单了,一点也不实用,下面来个实用的,如果你看不懂,没有关系,后面的内容会有详细解释。 BeautifierPlugin Error: Unable to handle "bash" syntax.

#!/bin/shif [ $# -ne 2 ] ; thenecho "Usage: $0 string file";exit 1;figrep $1 $2 ;if [ $? -ne 0 ] ; thenecho "Not Found \"$1\" in $2";exit 1;fiecho "Found \"$1\" in $2";

上面的例子中使用了$0 $1 $2 $# $? 等变量,下面是程序的解释:

  1. 判断运行参数个数,如果不等于2,显示使用"用法帮助", 其中 $0 表示就是脚本自己。
  2. 用grep 在$2 文件中查找$1 字符串。
  3. 判断前一个命令运行后的返回值(一般成功都会返回0, 失败都会返回非0)。
  4. 如果没有成功显示没找到相关信息,否则显示找到了。
  5. 其中\"表示转义,在"" 里面还需要显示"号,则需要加上转义符\" .

下面运行的例子:

BeautifierPlugin Error: Unable to handle "bash" syntax.

./chapter2.2.sh usage chapter2.2.sh Not Found "usage" in chapter2.2.sh-bash-2.05b$ ./chapter2.2.sh Usage chapter2.2.sh      echo "Usage: $0 string file";Found "Usage" in chapter2.2.sh

2 shell 环境变量

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寻找库的路径,以冒号分隔

这些变量,要关注的最多的就是PATH, 其重要性不要我说了吧?

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

export MY_NAME=Winterexport PATH=/home/winter/bin:$PATH
上面的程序中,第一行输出MY_NAME变量,第二行是在环境变量PATH中增加一个路径/home/winter/bin 。如果你希望这些设置在你登陆unix/linux都有效,你需要把他们加入到你的shell启动脚本中, 如果是使用bash BeautifierPlugin Error: Unable to handle "bash" syntax.
~/.bash_profile
其他版本你看一眼就知道了,在你的home目录下,以"."开头的文件,一般都会隐藏起来,你需要使用'ls -al'命令来显示。
原创粉丝点击