Decode360's Blog

业精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

  BlogJava :: 首页 :: 新随笔 :: 联系 ::  :: 管理 ::
  397 随笔 :: 33 文章 :: 29 评论 :: 0 Trackbacks
Linux shell程序设计(四).变量-2
 
    变量的内容很多,继续接着昨天的。这次包括:位置变量、预定义变量、环境变量。希望能够都记住。
 
 
五、位置参数
 
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
    注:不要加“$”
 
 
 
 
posted on 2009-01-09 21:10 decode360 阅读(234) 评论(0)  编辑  收藏 所属分类: 03.Linux

只有注册用户登录后才能发表评论。


网站导航: