Decode360's Blog

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

  BlogJava :: 首页 :: 新随笔 :: 联系 ::  :: 管理 ::
  397 随笔 :: 33 文章 :: 29 评论 :: 0 Trackbacks
Linux shell程序设计(五).变量-3
 
    OK,变量问题的最后扫尾,包括了与变量相关的一些知识,不过也是重要的。
 
 
八、环境文件
 
    bash的环境文件包括:.bash_profile文件、.bashrc文件、.bash_logout文件等
 
    .bash_profile:设置化境变量和文件掩码(umask),注册后执行
    .bashrc:只含有针对bash的脚本,可以用来设置别名,在.bash_profile之后执行
    .bash_logout:退出注册是执行,例如清屏等操作
 
    注:若是C shell,则相应文件为.login
 
 
九、export语句与环境设置
 
1、export语句
 
    在脚本或命令行中定义的变量(包括环境变量),仅在同一shell下有效,例如:
    $ string="XXXX"
    $ cat ex11
        echo "the name is $string"
    $ ./ex11
        the name is
    $ echo $string
        the name is XXXX
    可以看到,上面的例子中,定义的string变量仅在当前的shell下有效,而在ex11环境下为空。
 
    export命令的作用就是将私有的变量export到转出区
    export [变量名]
 
    例如:
    $ name="AAA"
    $ export name
    $ cat ex12
        name="BBB"
        echo "His name is $name"
        ex13
    $ cat ex13
        echo "Her name is $name"
    $ ./ex12
        His name is BBB
        Her name is AAA
 
    注:export在同一命令行中可以对应多个变量,例如:
    $ export TERM PATH SHELL HOME
 
2、环境变量的设置和显示
 
    直接设置变量的形式为: [变量名]=值
    注意:如果含有空格等特殊字符,用""括起来
 
    可以使用不带参数的export命令显示本进程利用export命令所输出的全部变量
    $ export
        declare -x HOME="/home/oracle"
        declare -x HOSTNAME="localhost.localdomain"
        declare -x INPUTRC="/etc/inputrc"
        declare -x LANG="en_US.UTF-8"
        declare -x PWD="/home/oracle"
        declare -x SHELL="/bin/bash"
        declare -x SHLVL="2"
        declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
        declare -x SSH_CLIENT="::ffff:192.168.63.1 1474 22"
        declare -x SSH_CONNECTION="::ffff:192.168.63.1 1474 ::ffff:192.168.63.3 22"
        declare -x SSH_TTY="/dev/pts/1"
        declare -x TERM="vt100"
        ... ...
    也可以使用env命令列出所有的化境变量(包括本进程和以前进程所输出的变量)
    $ env
        MAIL=/var/spool/mail/root
        PWD=/home/oracle
        INPUTRC=/etc/inputrc
        LANG=en_US.UTF-8
        SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
        HOME=/home/oracle
        SHLVL=2
        LOGNAME=oracle
        SSH_CONNECTION=::ffff:192.168.63.1 1474 ::ffff:192.168.63.3 22
        LESSOPEN=|/usr/bin/lesspipe.sh %s
        G_BROKEN_FILENAMES=1
        OLDPWD=/root
        ... ...
 
3、set命令
 
    set命令的功能有三个:
 
    ① 显示迄今为止所有定义的变量,包括局部变量和公用变量
    ② 设定位置参数的值
    ③ 改变执行shell脚本时的选项设定
 
    功能①即使用不带参数的set命令
    功能②见上文
    功能③说明如下:
 
    设置标志:set -标志
    关闭标志:set +标志
 
    标志说明:
 
    -x:命令打印,并在前面加“+”
    -v:所有命令均打印出来
    -a:对被修改、创建的变量自动标记,表明要被export到后继名命令的环境中
    -e:命令以非0状态终止时退出shell(循环/if语句除外)
    -f:禁止路径名扩展
    -h:记住命令位置,便于查找(默认打开)
    -k:把全部以赋值语句形式出现的参数放在命令的环境中
    -n:读命令,但不执行   
 
 
十、参数置换变量
 
    参数置换变量是另一种为参数复制的方式,形式为:
    [变量2]=${[变量1]op[字符串]}   op in [ :- | := | :+ | :? ]
 
    注:op两边不能有空格
 
1、[变量2]=${[变量1]:-[字符串]}
 
    如果[变量1]为空,则[变量2]=[字符串],[变量1]不变;否则[变量2]=[变量1],[变量1]不变
 
    举例:
    $ cat ex15
        echo -n "Please enter TERM1(default is ansi)->"
        read terminal
        TERM1=${ terminal:-ansi }
        echo "terminal type is $TERM1 now."
        echo "terminal=$terminal"
    $ ./ex15
        Please enter TERM1(default is ansi)->(按Enter键)
        terminal type is ansi now.
        terminal=
    $ ./ex15
        Please enter TERM1(default is ansi)->(vt100 按Enter键)
        terminal type is vt100 now.
        terminal=vt100
 
2、[变量2]=${[变量1]:=[字符串]}
 
    如果[变量1]为空,则[变量2]=[字符串],[变量1]=[字符串];否则[变量2]=[变量1],[变量1]不变
 
    举例:
    $ cat ex16
        echo -n "Please enter TERM2(default is ansi)->"
        read terminal
        TERM2=${ terminal:=ansi }
        echo "TERM2=${TERMS2}***terminal=$terminal"
    $ ./ex16
        Please enter TERM2(default is ansi)->(按Enter键)
        TERM2=ansi***terminal=ansi
    $ ./ex16
        Please enter TERM2(default is ansi)->(vt100 按Enter键)
        TERM2=vt100***terminal=vt100
 
3、[变量2]=${[变量1]:+[字符串]}
 
    如果[变量1]为空,则[变量2]为空,[变量1]不变;否则[变量2]=[字符串],[变量1]不变
 
    举例:
    $ cat ex17
        echo -n "Please enter TERM3(default is ansi)->"
        read terminal
        TERM3=${ terminal:+ansi }
        echo "TERM3=${TERMS3}!!!terminal=$terminal"
    $ ./ex17
        Please enter TERM3(default is ansi)->(按Enter键)
        TERM3=!!!terminal=
    $ ./ex17
        Please enter TERM3(default is ansi)->(vt100 按Enter键)
        TERM3=ansi!!!terminal=vt100
 
4、[变量2]=${[变量1]:?[字符串]}
 
    如果[变量1]为空,则输出 “[shell脚本名]:[变量1]:[字符串]”;否则[变量2]=[变量1],[变量1]不变
 
    举例:
    $ cat ex18
        echo -n "Please enter TERM4(default is ansi)->"
        read terminal
        TERM4=${ terminal:+ansi }
        echo "TERM4=${TERMS4}\$\$\$terminal=$terminal"
    $ ./ex18
        Please enter TERM4(default is ansi)->(按Enter键)
        ex18:terminal:ansi
    $ ./ex18
        Please enter TERM3(default is ansi)->(vt100 按Enter键)
        TERM3=ansi$$$terminal=vt100
 
    注:显示的[变量1]是其名称,而不是它的值。
 
 
posted on 2009-01-10 23:14 decode360 阅读(225) 评论(0)  编辑  收藏 所属分类: 03.Linux

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


网站导航: