分享

Linux变量

 用勿龍潛 2011-09-22
Linux变量 2011-08-29 10:54:51  www.  来源:互联网

key words:定义 、命名规则 、设置局部变量与全局变量 、读取变量值、取消与清空变量、变量的有效作用范围、设置PATH环境变量、bash的内置命令和内置变量、调整变量的属性、别名、数组 一、什么是变量 ...
key words:定义 、命名规则 、设置局部变量与全局变量 、读取变量值、取消与清空变量、变量的有效作用范围、设置PATH环境变量、bash的内置命令和内置变量、调整变量的属性、别名、数组
 
一、什么是变量
     变量——可以暂时存储数据的地方,程序设计的基石
    bash shell 没有所谓的数据形态,不会区分整型、浮点型、字符型等变量,在bash shell中默认只有一种数据型态:以字符组成的字符串,bash shell把任何存储在变量中的值皆视为以字符组成的字符串,除非使用内置命令declare特别指定变量形态
     所以,bash shell的变量不必经过事先声明,想用就用。
例:
[root@localhost ~]# cat bb
i=liting
echo i am $i
echo done
[root@localhost ~]# chmod a+x bb
[root@localhost ~]# ./bb
i am liting
done
 
二、变量名称
   由英文字母、数字和下划线组成,开头第一个字母不能使用数字,有大小写区别,长度不限。
例:mydomain、_for_system、BlackCar
 
三、设定变量:变量名=值
   最好用双引号或单引号把变量值括起来,单引号的作用是形成一个所见即所得的字符串,不会进行任何替换变量的操作,双引号可以替换变量、命令执行结果及算术运算结果。
设定局部变量
例:myname="liting wen"
[root@localhost ~]# cat bb
#! /bin/bash
shopt -s -o nounset
h="twenty_four"
i="i am $h"
echo $i
[root@localhost ~]# ./bb
i am twenty_four
在脚本前面加上shopt -s -o nounset可以避免手误写错变量,-s:打开选项,nounset:变量一定要先设定过才能使用,否则会提示unbound variable
 
设定全局变量:
全局变量=环境变量
若该变量需要在其他子进程中执行,则需要用export来使变量变成环境变量。
[root@localhost ~]# cat testvar.sh
#! /bin/bash
testvar="hello world"
export testvar
echo $testvar
[root@localhost ~]# ./testvar.sh
hello world
[root@localhost ~]# bash           进入一个子shell
[root@localhost ~]# ./testvar.sh
hello world
 
四、读取变量值
$变量名称         ${变量名称}
若变量后面接有字母或下划线,必须用 {} 括起变量名
#! /bin/bash
shopt -s -o nounset
h=twenty
echo ${h}_four
[root@localhost ~]# ./bb
twenty_four
[root@localhost ~]# vim bb
[root@localhost ~]# ./bb                    否则会出现以下报错
./bb: line 4: h_four: unbound variable
 
除了echo,bash还提供了一个和C语言类似的printf命令:
[root@localhost ~]# cat bb
#! /bin/bash
shopt -s -o nounset
h="wlt"
printf "%s""$h "
[root@localhost ~]# ./bb
wlt
s%:字符串
d%:整数
f%:浮点数
%%:显示%这个符号
c%:字符
 
五、取消与清空变量
取消变量
unset变量名称/函数名称
    -v 表示要取消的是变量
   -f    表示要取消的是函数
例:
[root@localhost ~]# cat bb
#! /bin/bash
shopt -s -o nounset
h="twenty_four"
unset -v h
printf "%s""$h "
[root@localhost ~]# ./bb
./bb: line 5: h: unbound variable
 
清空变量:
变量名称=
例:
[root@localhost ~]# cat bb
#! /bin/bash
shopt -s -o nounset
h="twenty_four"
h =                                
printf "%s""$h "
[root@localhost ~]# ./bb
                                                  
[root@localhost ~]#
 
六、变量的有效作用范围
bash shell中 有两种类型的变量:
全局变量
本地变量
本地变量只在本进程中有效
全局变量在shell会话和该shell产生的任何子进程中可见,本地变量只在创建他们的shell中可见。
查看全局变量:
[root@localhost ~]# printenv
SSH_AGENT_PID=3624
HOSTNAME=localhost.localdomain
DESKTOP_STARTUP_ID=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
GTK_RC_FILES=/etc/gtk/gtkrc:/root/.gtkrc-1.2-gnome2
WINDOWID=24117329
USER=root
。。。。。。
LESSOPEN=|/usr/bin/lesspipe.sh %s
DISPLAY=:0.0
G_BROKEN_FILENAMES=1
COLORTERM=gnome-terminal
XAUTHORITY=/tmp/.gdmOKVDWV
查看特定进程下的所有环境变量:
[root@localhost ~]# set
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=()
 
。。。。。。
HISTSIZE=1000
HOME=/root
HOSTNAME=localhost.localdomain
HOSTTYPE=i686
IFS=$' \t '
INPUTRC=/etc/inputrc
LANG=zh_CN.UTF-8
LESSOPEN='|/usr/bin/lesspipe.sh %s'
。。。。。。
XMODIFIERS=@im=none
_=clear
consoletype=pty
tmpid=0
使用set命令时并非所以默认的环境变量都会列出来,应为虽然有很多环境变量,但并非所以环境变量都有值。
 
全局变量和本地变量的作用范围例子:
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# bash                   用bash命令开启一个新的shell
[root@localhost ~]# bash
[root@localhost ~]# echo $HOME                    全局命令依然可用
/root
[root@localhost ~]# exit
exit
[root@localhost ~]# exit                            退出两层shell
exit
[root@localhost ~]# i=5                            定义一个本地环境变量
[root@localhost ~]# echo $i
5
[root@localhost ~]# bash                       再开启一个新shell                                   
[root@localhost ~]# echo $i                   显示不了发现刚才定义的环境变量
 
全局变量
export   -p :列出当前所有的环境变量
例:
[root@localhost ~]# cat testvar.sh
#! /bin/bash
testvar="hello world"
export testvar
echo $testvar
[root@localhost ~]# bash
[root@localhost ~]# ./testvar.sh
hello world
[root@localhost ~]#
 
设置PATH环境变量
Linux系统上发生的很多命令问题都是由PATH环境变量造成的,它定义shell在哪里查找命令行中输入的命令,如果如法找到就会生成错误信息:
[root@localhost ~]# liting
bash: liting: command not found
[root@localhost ~]#
当程序把可执行程序房子PATH环境变量以为的目录中时,可以在现有PATH中添加新的搜索目录。
[root@localhost ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
[root@localhost ~]# PATH=$PATH:/root/liting
[root@localhost ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/root/liting
[root@localhost liting]# chmod a+x aa
[root@localhost liting]# aa
it work!
[root@localhost liting]# cd
[root@localhost ~]# aa
it work!
[root@localhost ~]# cd /etc
[root@localhost etc]# aa
it work!
[root@localhost etc]#
 
七、bash的内置命令和内置变量
bash的内置命令
可以不去程序搜寻路径$PATH中寻找,直接就可以执行,速度比较快,常见的内置命令有:
alias、bg、bind、break、type、time、logout、export、exec、declare、dirs、echo、enable、help、if、kill、return等
 
bash默认建立了许多内置变量,shellscript程序设计者不可不知
例如
BAHS、BASH_VERSION、CDPATH、HOME、HOSTTYPE、LANG、PATH、TMOUT、UID ……
 
八、调整变量的属性
想某些变量的值不被修改,例如PI=3.14,可以把变量设为只读变量
命令:
readonly
declare
 
readonly 变量名
[root@localhost ~]# cat bb
#! /bin/bash
shopt -s -o nounset
readonly x=3
x=8
echo $x
[root@localhost ~]# ./bb
./bb: line 4: x: readonly variable
3
[root@localhost ~]#
readonly -p :显示目前只读变量
readonly -f 函数名称 :该函数式不可修改
readonly -a 数组变量 :只读数组
 
declare -r 变量名称

[root@localhost ~]# cat bb
#! /bin/bash
shopt -s -o nounset
x=2
declare -r x
x=8
echo $x
[root@localhost ~]# ./bb
./bb: line 5: x: readonly variable
2
[root@localhost ~]#
declare的其他用法:
declare -p VAR             显示VAR的属性
declare -a   arry             设定arry是个数组
declare   -i   VAR              设定VAR是整数型态
declare   -x   VAR            设定VAR为环境变量
 
九、别名  
查看系统设置的别名:
[root@localhost ~]# alias -p
alias cp='cp -i'
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
 
设置别名
[root@localhost ~]# alias ld='ls -ld'
[root@localhost ~]# ld
drwxr-x--- 19 root root 4096 05-29 08:38 .
[root@localhost ~]# ld /etc
drwxr-xr-x 101 root root 12288 05-29 08:37 /etc
[root@localhost ~]#
取消别名
unalias 别名
unalias   -a 取消所有别名
[root@localhost ~]# unalias ld
[root@localhost ~]# ld /etc
/etc: file not recognized: Is a directory
[root@localhost ~]#
设置别名的文件:~./bashrc
 
十二、数组
bash shell只支持一维数组(关系型数组在bash4.0中才支持),其元素个数没限制,数组的索引由0开始,不一定要连续,也可以用算术表达式表示,如1+3
例:
A[0]=1
A[1]=3
A[2]="bash shell"
 
1、取出数组元素
取出数组A的第三个元素值:echo ${A[2]}
取出数组所有的元素:echo ${[@]}或echo ${[*]}   
取出数组元素的个数 ${#A[@]}
例:
[root@localhost ~]# cat bb
#! /bin/bash
shopt -s -o nounset
A[0]=1
A[1]=3
A[2]=5
echo ${A[2]}
echo ${A[@]}
echo ${#A[@]}
[root@localhost ~]# ./bb
5
1 3 5
3
 
2、取消数组元素:unset A[n]    取消数组A:unset A
[root@localhost ~]# cat bb
#! /bin/bash
shopt -s -o nounset
A[0]=1
A[1]=3
A[2]=5
unset A[0]
echo ${A[0]}
echo ${A[@]}
echo ${#A[@]}
[root@localhost ~]# ./bb
./bb: line 7: A[0]: unbound variable
 
本文出自 “吖one的学习笔记” 博客,请务必保留此出处http://oneliting.blog.51cto.com/1043925/650908

本篇文章来源于 黑基网-中国最大的网络安全站点 原文链接:http://www./tech/2011-08-29/65169.html
本篇文章来源于 黑基网-中国最大的网络安全站点 原文链接:http://www./tech/2011-08-29/65169.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多