shell脚本编程讲解2

自定义环境变量(全局变量)

设置环境变量

如果想设置环境变量,就要在给变量赋值之后或设置变量时使用export命令,带-x选项的declare

内置命令也可可以同样完成功能(注意:输出变量时不要在变量名前面加$

格式:

export 变量名=value

②变量名=value;export 变量名

declare -x 变量名=value

实例:

1.当前生效

exportOLDBOY="oldboy"

echo $OLDBOY

2.对当前用户有效

vi .bash_profile

3.对所有用户都生效

vi /etc/profile

source /etc/profile . ./etc/profile

显示与取消环境变量

通过echo 命令打印环境变量

$HOME用户登陆时进入的目录

 

$UID 当前用户的UID(用户标识)

 

$PWD 当前工作目录的绝对路径名

$SHELL 当前SHELL

$USER当前用户

[oldboy@mode ~]$ echo $HOME

/home/oldboy

[oldboy@mode ~]$ echo $UID

501

[oldboy@mode ~]$ echo $PWD

/home/oldboy

[oldboy@mode ~]$ echo$SHELL

/bin/bash

[oldboy@mode ~]$ echo $USER

oldboy

env{printenv}set显示默认的环境变量

[oldboy@mode ~]$

[oldboy@mode ~]$ env

HOSTNAME=mode

SHELL=/bin/bash

TERM=vt100

OLD=old

HISTSIZE=1000

LC_ALL=C

USER=oldboy

LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=

01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*

.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.l

zh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31

:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35

:*.png=01;35:*.tif=01;35:

MAIL=/var/spool/mail/oldboy

PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sersync/bin:/usr/local

/mysql/bin:/usr/local/mysql/scripts:/usr/local/mysql:/home/oldboy/bin:/home/oldboy/bi

n

INPUTRC=/etc/inputrc

PWD=/home/oldboy

LANG=en_US.UTF-8

OLDBOY=oldboy

SHLVL=1

HOME=/home/oldboy

LOGNAME=oldboy

CVS_RSH=ssh

LESSOPEN=|/usr/bin/lesspipe.sh%s

G_BROKEN_FILENAMES=1

_=/bin/env

或则set -a

[oldboy@mode ~]$ id -u

501

[oldboy@mode ~]$ echo $UID

501

unset消除本地变量和环境变量

echo $USER

unset USER

局部变量

定义本地变量

普通字符串变量定义

变量名=value

变量名=‘value‘

变量名=value

输出 echo a=$a

或者 echo a=${a}

有关单引号.双引号与不加引号的简要说明如下:

单引号:

        可以说是所见即所得:即将单引号的内容原样输出,或者描述为单引号里面看到底的

是什么,就输出什么

双引号:

把双引号内的内容输出出来;如果内容中有命令,变量等,会先把变量,命令解析出结果,然后

在输出最终内容来

无引号:

    把内容输出出来,会将含有空格的字符串视为一个整体输出,如果内容中有命令。变量

等,会先把变量,命令解析出结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符

,则不能完整的输出,需要改加双引号,一般连续的字符串,数据,路径等可以用,不过最好用

双引号替代之

 

范例1:经过反引号的‘date’命令测试

[root@mode ~]# echo‘`date`‘

`date`

[root@mode ~]# echo"`date`"

Sat Feb 14 19:25:29 CST2015

[root@mode ~]# echo `date`

Sat Feb 14 19:25:37 CST2015

对于变量的引用,一个 一个是$,另一个是``

范例2awk 调用s[root@mode ~]# ETT=123

[root@mode ~]# awk ‘BEGIN{print "$ETT"}‘

$ETT

[root@mode ~]# awk ‘BEGIN{print ‘$ETT‘}‘

123

 

自定义变量的建议

1. 纯数字(不带空格),定义方式可以不加引号(单或双),例如

 a.oldboyage=33

 b.NETWORKING=yes

 2.没有特殊情况,字符串一般用双引号()定义,特别是多个字符创空间有空格时

 a.NFSD_NODULE="no load"

 b.MyName="Oldboy is handsome boy."

 3.变量内容需要原样输出时,要用单引号(‘‘

 a.OLDBOY_NAME=‘OLDBOY‘

变量的命名规范

1)变量命名要统一,使用全部大写字母,多个单词连接使用“_,引用时,最好以${APACHE}

_ERR_NUM}加大括号或“${APACHE_ERR_NUM}”外面加双引号方式引用变量:

2)避免无含义字符或数字:例如下面的COUNT,并不知道其确切含义

3)全局变量定义,如OLDBOY_HOMEOLDBOYHOME,在变量使用时,使用{}将变括起来

或“${OLDBOY_HOME}

脚本中局部变量定义:存在于脚本函数(function)中的变量称为局部变量,要以local方式进行

声明,使之之在本函数作用域内有效,防止变量在函数中的命名与变量外部程序中变量重名造成

程序异常,

function TestFunc()

{

local i

for((i=0;i<n;i++))

do

echo ‘do something‘;

done

}

变量合并:当某些变量或配置项要组合起来才有意义时,如文件的路径,和文件名称,建议将要

组合的变量合并到一起赋值给一个新的变量,这样既方便之后的调用,也为以后进行修改提供方

便;

例如:VERSION=‘2.2.22‘

      SOFTWARE_NAME="httpd"

     SOFTWARE_FULLNAME="${SOFTWARE_NAME}-${VERSION}.tar.gz"

把一个命令作为变量

CMD= `ls`wd/

echo $CMD

[root@mode ~]# ls

anaconda-ks.cfg  index.html   install.log         oldboy

grep.log         index.html.1  install.log.syslog

[root@mode ~]# CMD=`ls`

[root@mode ~]# echo $CMD

anaconda-ks.cfg grep.logindex.html index.html.1 install.log install.log.syslog

oldboy 

在变量名前面加$,可以取得此变量的值,使用echo 命令 可以显示变量的值,$A${A}的写法不

同,但是功能一样,

3${WEEK}day 若变量和其他字符组成新的变量就必须加上大括号{}

4养成将所有字符创变量用双引号括起来的使用的习惯,将会减少很多编程是遇到的奇怪的错误

生产环境常见应用:

1.对站点按天打包生成不同的文件名。

CMD=$(date +%F)

echo $CMD

echo $(date +%F).tar.gz

echo `date +%F`.tar.gz

tar zcvf etc_$(date +%F).tar.gz/etc

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。