变量定义的基本规则:
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(所有字符都会替换掉)