linux黄金变量,Linux变量

Linux变量 2011-08-29 10:54:51  www.hackbase.com  来源:互联网

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值