五、位置参数
				
		
		
				
						
						
				 
		
				
						
								1、位置参数及其引用
						
				
		
		
				
						
						
				 
		
				
						
								    Linux可以用位置参数来定义命令行上的具体实参,例如:
						
				
		
		
				
						
								
										    $ set `pwd;ls;date`
    $ echo $0 $1 $2 $3 $4 $5 $6 $11 ${11}
    -bash /opt/test a bbb kkk nnn Thu /opt/test1 2009
								
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    由上例可见:
						
				
		
		
				
						
								    ① $0对应的是命令名(脚本名)
						
				
		
		
				
						
								    ② $n对应第n个字符串(以空格隔开)
						
				
		
		
				
						
								    ③ $11对应的是$1再跟上"1",若需要显示第11个参数,使用${11}
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    再举一个例子:
						
				
		
		
				
						
								    $ cat m1.c
						
				
		
		
				
						
								        main()
						
				
		
		
				
						
								        {
						
				
		
		
				
						
								            printf("Begin\n");
						
				
		
		
				
						
								        }
						
				
		
		
				
						
								    $ cat m2.c
						
				
		
		
				
						
								    main()
						
				
		
		
				
						
								    {
						
				
		
		
				
						
								        print("OK!\n");
						
				
		
		
				
						
								
										
												
														        print("End!\n");
												
										
								
						
				
		
		
				
						
								    }
						
				
		
		
				
						
								    $ cat ex6
						
				
		
		
				
						
								        # ex6:shell script to combine files and count lines
						
				
		
		
				
						
								          cat $1 $2 $3 $4 $5 $6 $7 $8 $9 | wc -l
						
				
		
		
				
						
								        # end
						
				
		
		
				
						
								    $ ./ex6 m1.c m2.c
						
				
		
		
				
						
								      9
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    这段代码的意思是:依次打印ex6脚本后面带的实参指定的文件后计算行数(最多9个)
						
				
		
		
				
						
						
				 
		
				
						
								2、用set命令为位置参数赋值
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    可以利用set命令为位置参数赋值或重新赋值,例如:
						
				
		
		
				
						
								
										    $ set a b c
    $ echo $0 $1 $3
      -bash a c
										
								
						
				
		
		
				
						
								    再举个应用的例子:
						
				
		
		
				
						
								    $ cat ex7
						
				
		
		
				
						
								        #!/bin/bash
						
				
		
		
				
						
								        set m1.c m2.c
						
				
		
		
				
						
								        cat $1 $2 $3 | wc -l
						
				
		
		
				
						
								    $ ./ex7
						
				
		
		
				
						
								      9
						
				
		
		
				
						
								
								
						
				 
		
				
						
								3、移动位置参数
						
				
		
		
				
						
						
				 
		
				
						
								    可以使用shift命令移动除$0外的所有参数的位置(向右顺移)
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    $ cat ex8
						
				
		
		
				
						
								        #!/bin/bash
						
				
		
		
				
						
								        echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9
						
				
		
		
				
						
								        shift
						
				
		
		
				
						
								
										
												
														        echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9
												
										
								
						
				
		
		
				
						
								
										
												        shift 4
										
								
						
				
		
		
				
						
								
										
												
														
																
																		        echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9
																
														
												
										
								
						
				
		
		
				
						
								
										
												
														
																        #end
														
												
										
								
						
				
		
		
				
						
								
										
												    $ ./ex8 A B V F G T R E D S
      ./ex8 A B V F G T R E D
      ./ex8 B V F G T R E D S
      ./ex8 T R E D S
								
								
						
				
		
		
				
						
						
				 
		
				
						
						
				 
		
				
						
						
				 
		
				
						六、预先定义的特殊变量
				
		
		
				
						
						
				 
		
				
						
								    ① $#:表示命令上上的参数个数(不包含命令本身)
						
				
		
		
				
						
								    ② $?:上一条命令执行后的返回值(执行成功为0 | 失败为非0)
						
				
		
		
				
						
								    ③ $$:当前进程的进程号
						
				
		
		
				
						
								        注:因为每个进程都有唯一进程号,所以可以利用$$作为临时文件的唯一文件名。
						
				
		
		
				
						
								    ④ $!:上一个后台命令对应的进程号(是一个由1-5个数字构成的字符串)
						
				
		
		
				
						
								
										    ⑤ $-:当前shell设置的执行标识名
						
				
		
		
				
						
								        $ set -xv
						
				
		
		
				
						
								        $ echo display current shell flags $-
						
				
		
		
				
						
								          display current shell flags himvxBH
						
				
		
		
				
						
								    ⑥ $*:列出所有的参数
						
				
		
		
				
						
								    ⑦ $@:基本与$*相同。区别在于:
						
				
		
		
				
						
								        $ cat ex10
						
				
		
		
				
						
								          #!/bin/bash
						
				
		
		
				
						
								          date
						
				
		
		
				
						
								          set `date`
						
				
		
		
				
						
								          echo $*
						
				
		
		
				
						
								          for i in "$*"
						
				
		
		
				
						
								          do echo $i;
						
				
		
		
				
						
								          done
						
				
		
		
				
						
								
										
												
														
																          echo $@
														
												
										
										
												
														
														
												
												
														
																          for i in "$@"
														
												
										
										
												
														
																          do echo $i;
														
												
										
										
												
														
																          done
														
												
										
										
												
														
																          echo "end."
														
												
										
										
												
														
																        $ ./ex10
														
												
										
										
												
														
																          Thu Mar 5 16:59:01 CST 2009
          Thu Mar 5 16:59:01 CST 2009
          Thu Mar 5 16:59:01 CST 2009
          Thu Mar 5 16:59:01 CST 2009
          Thu
          Mar
          5
          16:59:01
          CST
          2009
          end.
														
												
										
								
						
				
		 
		
				
						
								      发现$@在for循环时将各个参数分解,而$*不变
						
				
		
		
				
						
						
				 
		
				
						
						
				 
		
				
						
						
				 
		
				
						七、环境变量
				
		
		
				
						
						
				 
		
				
						
								    在bash、sh、ksh中可以使用env命令以及不带参数的set命令列出所有已定义的环境变量。 
						
				
		
		
				
						
								
								
						
				 
		
				
						
								
										
												 1、常用环境变量
								
								 
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    ① HOME:用户主目录的全路径名
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    默认为:/home/userid
						
				
		
		
				
						
								    可以使用 cd $HOME | cd ~ | cd 来切换回主目录路径。
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    ② LOGNAME:注册名,由Linux自动设置
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    可以通过LOGNAME变量使系统确认文件的拥有着,有权执行某个命令。
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    ③ MAIL:系统邮箱的地址
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    默认为:/var/spool/mail/userid
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    ④ PATH:shell从中查找命令的目录列表
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    多个目录以“:”分开,可以使用以下命令添加目录:
						
				
		
		
				
						
								    $ PATN=$PATH:$HOME/bin
						
				
		
		
				
						
								    一般用户自身的命令存放在 /usr/local/bin 目录下
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    ⑤ PS1:shell的主提示符
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    默认为:\s-\v\$
						
				
		
		
				
						
								    具体的参数说明如下:
						
				
		
		
				
						
								    \d:以“星期 月 日”形式的日期
						
				
		
		
				
						
								    \h:主机名,直至第一个“.”为止
						
				
		
		
				
						
								    \H:主机全名
						
				
		
		
				
						
								    \s:所用的shell名称
						
				
		
		
				
						
								    \t:按24小时制形式表现的时间
						
				
		
		
				
						
								    \T:按12小时制形式表现的时间
						
				
		
		
				
						
								    \@:按12小时制am/mp形式表示的时间
						
				
		
		
				
						
								    \u:当前用户名
						
				
		
		
				
						
								    \v:bash版本号
						
				
		
		
				
						
								    \w:当前工作目录
						
				
		
		
				
						
								    \$:若有效UID为0,则为“#”,否则为“$”
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    ⑥ PWD:当前工作目录路径
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    ⑦ SHELL:当前使用的shell及解释程序位置
						
				
		
		
				
						
								
								
						
				 
		
				
						
								
								
						
				
				
						
								    ⑧ TERM:终端类型
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    本机:vt100
						
				
		
		
				
						
						
				 
		
				
						
								2、使用环境变量
						
				
		
		
				
						
						
				 
		
				
						
								    用echo命令查看任何一个环境变量
						
				
		
		
				
						
								    $ echo $SHELL
						
				
		
		
				
						
								        /bin/bash
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    注:由上可知,用“$”可以引用任何的环境变量作为变量使用
						
				
		
		
				
						
						
				 
		
				
						
								3、删除环境变量
						
				
		
		
				
						
								
								
						
				 
		
				
						
								    $ unset NAME
						
				
		
		
				
						
								    注:不要加“$”
						
				
		
		
				
						
						
				 
		
				
						
						
				 
		
				
						
						
				 
		
				
						
						
				 
		
				
						
								
						
				
				
-The End-