表示方法 | 描述 |
---|---|
$n | $1 表示第一个参数,$2 表示第二个参数 ... |
$# | 命令行参数的个数 |
$0 | 当前程序的名称 |
$? | 前一个命令或函数的返回码 |
$* | 以"参数1 参数2 ... " 形式保存所有参数 |
$@ | 以"参数1" "参数2" ... 形式保存所有参数 |
$$ | 本程序的(进程ID号)PID |
$! | 上一个命令的PID |
#!/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 stlchina the number of parameter is 2 the return code of last command is 0 the script name is ./chapter2.1.sh the parameters are winter stlchina $1 = winter ; $2 = stlchina
这个例子太简单了,一点也不实用,下面来个实用的,如果你看不懂,没有关系,后面的内容会有详细解释。 BeautifierPlugin Error: Unable to handle "bash" syntax.
#!/bin/sh if [ $# -ne 2 ] ; then echo "Usage: $0 string file"; exit 1; fi grep $1 $2 ; if [ $? -ne 0 ] ; then echo "Not Found \"$1\" in $2"; exit 1; fi echo "Found \"$1\" in $2";
上面的例子中使用了$0 $1 $2 $# $? 等变量,下面是程序的解释:
下面运行的例子:
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
用户定义的变量必须由字母数字及下划线组成,并且变量名的第一个字符不能为数字, 与其它UNIX名字一样,变量名是大小写敏感的. 对于用户变量,用户可按如下方式赋值:BeautifierPlugin Error: Unable to handle "bash" syntax.
name="Winter"
name="Winter" WINTER=$name echo "Hello $WINTER !"
这里需要注意一点:变量和'='之间不要有空格,'='和赋值也不要有空格,否则shell不会认为变量被定义。掌握了基本的使用方法,你可以完全开始你的编程工作了。不过有时候需要未雨绸缪,下面介绍用户变量的一些技巧。
SAT=Satur echo Today is ${SAT}day
有时候为了避免变量名和别的字符产生混淆,你最好养成习惯把变量名用{}括起来。
对于未赋值的变量, Shell以空值对待, 用户也可以用unset命令清除给变量赋的值.看一个例子: BeautifierPlugin Error: Unable to handle "bash" syntax.
#!/bin/sh echo "a=$a" ; a=2 echo "a=$a" ; unset a echo "a=$a" ;
-bash-2.05b$ ./test.sh a= a=2 a=
#!/bin/sh echo "a=$a" ; #下面增加了readonly readonly a=2 echo "a=$a" ; unset a echo "a=$a" ;
-bash-2.05b$ ./test.sh a= a=2 a=2
shell有两种赋值方式,第一种是直接用下标赋值: BeautifierPlugin Error: Unable to handle "bash" syntax.
name[0]="Tom" name[1]="Tomy" name[2]="John" ...
#!/usr/local/bin/bash name=("Tom" "Tomy" "John") for i in 0 1 2 do echo $i:${name[$i]} ; done;
-bash-2.05b$ ./test.sh 0:Tom 1:Tomy 2:John
名称 | 描述 |
PATH | 命令搜索路径,以冒号为分隔符.注意与DOS下不同的是, 当前目录不在系统路径里 |
HOME | 用户home目录的路径名,是cd命令的默认参数 |
COLUMNS | 定义了命令编辑模式下可使用命令行的长度 |
EDITOR | 默认的行编辑器 |
VISUAL | 默认的可视编辑器 |
FCEDIT | 命令fc使用的编辑器 |
HISTFILE | 命令历史文件 |
HISTSIZE | 命令历史文件中最多可包含的命令条数 |
HISTFILESIZE | 命令历史文件中包含的最大行数 |
IFS | 定义SHELL使用的分隔符 |
LOGNAME | 用户登录名 |
指向一个需要SHELL监视其修改时间的文件.当该文件修改后, SHELL将发消息You hava mail给用户 | |
MAILCHECK | SHELL检查MAIL文件的周期,单位是秒 |
MAILPATH | 功能与MAIL类似.但可以用一组文件,以冒号分隔,每个文件后可跟一个问号和一条发向用户的消息 |
SHELL | SHELL的路径名 |
TERM | 终端类型 |
TMOUT | SHELL自动退出的时间,单位为秒,若设为0则禁止SHELL自动退出 |
PROMPT_COMMAND | 指定在主命令提示符前应执行的命令 |
PS1 | 主命令提示符 |
PS2 | 二级命令提示符,命令执行过程中要求输入数据时用 |
PS3 | select的命令提示符 |
PS4 | 调试命令提示符 |
MANPATH | 寻找手册页的路径,以冒号分隔 |
LD_LIBRARY_PATH | 寻找库的路径,以冒号分隔 |
这些变量,要关注的最多的就是PATH, 其重要性不要我说了吧?
如果你希望把你定义的变量让其他所有的shell程序都能使用,也就是定义新的环境变量。你只要使用export关键词就可以了。例如: BeautifierPlugin Error: Unable to handle "bash" syntax.
export MY_NAME=Winter export PATH=/home/winter/bin:$PATH
~/.bash_profile