linux系统中变量和环境变量

变量定义的基本规则:

1.变量名和变量内容以一个“=”来连接

  如 myname=zhangsan

2.等号两边不能直接接空格,如下为错误的

myname = zhangsan 或者 myname=zhang san

3.变量名可以为字母或数字,但不能以数字开头,如下是错误的

2myname=zhangsan

4.变量内容有空格可以使用“”双引号或者‘’单引号将变量内容结合起来,但

双引号内的特殊字符如$等,可以保留原有特性

单引号内的特殊字符仅为一般内容,纯文本

  如[root@www ~]# name=VBird

   [root@www ~]# echo $name VBird

   [root@www ~]# myname="$name its me"

   [root@www ~]# echo $myname

   [root@www ~]# VBird its me(双引号显示结果,$name仍作为变量使用)

 

   [root@www ~]# myname='$name its me'

   [root@www ~]# echo $myname

[root@www ~]# name its me(单引号显示结果,$name 没有被替换,仅作为一般字符输出)

5.可用跳脱字符‘\’,将特殊字符如$,\,空格等跳脱为一般字符

6.在一串指令中,还需要籍由其他指令提供的信息,则可以用反单引号【`指令`】或者【$(指令)】,反单引号是键盘上数字1左边的键,不是单引号

  如要取得核心的版本需要如下指令:

[root@localhost yaotameng]# echo `uname -r`
2.6.32-279.el6.x86_64
[root@localhost yaotameng]#
[root@localhost yaotameng]# echo $(uname -r)
2.6.32-279.el6.x86_64

 

uname -r是系统指令显示核心版本

 

7.若变量为扩展变量,如需要添加PATH一般都扩展变量,需要使用"$变量名"或${变量}累加内容,如下所示

  PATH=“$PATH”:/home/bin

8.若变量需要在子程序执行,则需要以export来是变量成为环境变量

export PAHT

9.通常大写字符为系统默认变量

 

10.取消变量设置的方法为unset

  如 unset myname

查看系统中变量的命令 env(environment),set,export

env观察环境变量

set观察所有变量(环境变量和自定义变量)

export: 自定义发量转成环境发量

 

set中PS1说明:

o \d :代表日期,格式为 Weekday Month Date,例如 "Mon Aug 1"

o \H :完整的主机名称。举例来说,鸟哥的练习机 linux.dmtsai.tw ,那么这个主机名称就是 linux.dmtsai.tw www.2cto.com

o \h :仅取主机名称的第一个名字。以上述来讲,就是 linux 而已, .dmtsai.tw 被省略。

o \t :显示时间,为 24 小时格式,如: HH:MM:SS

o \T :显示时间,12 小时的时间格式!

o \A :显示时间,24 小时格式, HH:MM

o \u :目前使用者的账号名称;

o \v :BASH 的版本信息;

o \w :完整的工作目录名称。家目录会以 ~ 取代;

o \W :利用 basename 取得工作目录名称,所以仅会列出最后一个目录名。

o \# :下达的第几个指令。

o \$ :提示字符,如果是 root 时,提示字符为 #

[root@localhost yaotameng]#

[root@localhost yaotameng]#PS1='[\u@\h \W \A #\#]\$'

[root@localhost yaotameng 00:28 #77]#


特殊变量 $和?

$: 钱字号本身也是个变量,这个变量代表的是目前这个shell的线程代号,亦即是所谓的PID(process ID)。
想要知道我们的shell PID,就可以用【echo $$】即可,出现的数字就是PID 号码

[root@localhost yaotameng 00:30 #79]#echo $$
1224
?: 问号也是一个特殊的变量,在bash里这个变量很重要,这个变量是上一个执行的指令所回传的值,当我们
执行某些指令时,这些指令都会回传一个执行后的代码,一般来说如果成功的执行改指令,则会回传一个
0值,如果执行发生错误,就会回传错误代码,一般就是以非0的数值来取代

[root@localhost yaotameng 00:36 #80]#echo $SHELL
/bin/bash
[root@localhost yaotameng 00:40 #81]#echo $?
0
[root@localhost yaotameng 00:41 #82]#2name=zhangdan
-bash: 2name=zhangdan: command not found
[root@localhost yaotameng 00:41 #83]#echo $?
127
[root@localhost yaotameng 00:41 #84]#


从键盘读取变量read

read [-pt]variable

-p :后面可直接接提示字符
-t :后面可以接等待的秒数,这个比较有趣,不会一直等待使用者

[root@localhost yaotameng 00:57 #92]#read -p "please input your name:" myname
please input your name:zhanger
[root@localhost yaotameng 00:58 #93]#echo $myname
zhanger
[root@localhost yaotameng 00:58 #94]#
[root@localhost yaotameng 00:58 #94]#
[root@localhost yaotameng 00:58 #94]#read -p "please input your name:" -t 10 myname
please input your name:
[root@localhost yaotameng 00:58 #95]#

 

declare/typeset定义不同类型的变量

[root@localhost yaotameng]#declare [-aixr] variable

-a :将后面的名称为variable的变量定义为数组(array)类型
-i :将后面的名称为variable的变量定义为整数数字
-x : 用法与export一样,就是将后面的variable变成环境变量
-r :将变量设定成为readonly类型,该变量不可更改内容,也不可unset


[root@localhost yaotameng 01:04 #97]#sum=50+100+200 (由于未定义类型,默认为字符串)
[root@localhost yaotameng 01:04 #98]#echo $sum
50+100+200
[root@localhost yaotameng 01:05 #100]#declare -i sum=50+100+200 (定义为整形)
[root@localhost yaotameng 01:05 #101]#echo $sum
350

bash环境中的运算,预设最多只能达到整数形态,所以1/3=0


将sum变成环境变量

[root@localhost yaotameng 01:05 #102]#declare -x sum
[root@localhost yaotameng 01:08 #103]#export | grep sum
declare -ix sum="350"
[root@localhost yaotameng 01:09 #104]#declare -p sum(单独列出变量的类型)
declare -ix sum="350"

取消环境变量

[root@localhost yaotameng 01:10 #105]#declare +x sum (-变成+变成取消动作)
[root@localhost yaotameng 01:10 #106]#
[root@localhost yaotameng 01:10 #106]#declare -p sum
declare -i sum="350"

 

数组类型的变量


[root@localhost yaotameng 01:11 #108]#var[1]="small one"
[root@localhost yaotameng 01:18 #109]#var[2]="samll two"
[root@localhost yaotameng 01:18 #110]#echo ${var[1]},${var[2]}
small one,samll two



变量内容 删除和替换(#,##,%,%%,/**/,//**/)

[root@localhost ~]#echo $path

/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]#
[root@localhost ~]# echo ${path#/*/bin:}   (从前开始删除/bin之前的内容,#表示符合需求的最短长度)
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[root@localhost ~]# echo $path
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# echo ${path##/*/}(从前开始删除/之前的所有内容,符合长度的最长长度)
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

 

%

 

[root@localhost ~]# echo $path
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[root@localhost ~]# echo ${path%bin*bin}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin(从后删除bin到bin之间的内容,符合长度的最短长度)

%%

/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# echo ${path%%bin*bin}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin(从后删除bin到bin的最长长度)

 

替换//

[root@localhost ~]# echo $path
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# echo ${path/sbin/SBIN}
/usr/local/SBIN:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin(第一个字符会替换掉)
[root@localhost ~]#
[root@localhost ~]# echo ${path//sbin/SBIN}
/usr/local/SBIN:/usr/local/bin:/SBIN:/bin:/usr/SBIN:/usr/bin:/root/bin(所有字符都会替换掉)

 

 

posted @ 2013-04-08 09:47  冬之夜  阅读(632)  评论(0编辑  收藏  举报