Shell的变量
同所有高级语言一样,shell编程也有变量这个概念。变量的具体定义就不需要再做介绍了。
变量的设置规则:
1.shell中变量默认为字符串型。
2.变量与变量值以等号连接。
3.等号两边不能有空格符(切记)
4.变量名称可以是英文字母、下划线与数字,但开头字符不能是数字。(变量名称要求与C语言一致)
5.变量值若包含空格,则需要用单引号或双引号将要赋给变量的内容括起来。
双引号内的特殊字符如$等,可以保有原本的特性,如:
var=”lang is $LANG”,再输出var的值可得”lang is en_US”。
单引号内的特殊字符则仅为一般字符(纯文本),如:
var=”lang is $LANG”,再输出var的值可得”lang is $LANG”。
6.可用转义字符”\”将特殊字符变为一般字符。
7.在一串命令中,还需要通过其他的命令提供的信息,可以用反单引号“`命令`”或“$(命令)”。eg:var=`uname-r` 或 var=$(uname-r)。
8.若该变量为了增加变量内容时,可用“$变量名称”或${变量}累加内容。
9.若该变量需要在其他子进程执行,则需要以export来使变量变成环境变量,如,export var。
10.通常大写字符为系统默认变量,自定义变量使用小写字符。
11.取消变量,使用unset命令。如,unset var。
12.显示变量值,使用echo命令,在变量名前一定要加$。echo $var显示变量var的值,echo var显示变量名称。
环境变量
env命令可以列出所有的环境变量。(export命令也可以实现这个功能)
set命令可以查看所有变量(含环境变量和自定义变量)。加上-u这个选项,调用未定义变量会报错。
子进程仅会继承父进程的环境变量,子进程不会继承父进程的自定义变量。
变量的有效范围:环境变量是全局变量,用户自定义变量是局部变量。
变量从键盘读取用read命令。
read [-pt] var
参数:
read:不加参数,会出现一个空白行等待输入。
-p :后面可以接提示符。(read -p “Please key in your name:” var)
-t :后面可以接等待的秒数。
声明变量的类型,用declare/typeset命令
declare [-aixr] var
参数:
declare:不加参数bash会将所有变量名称与变量内容全部调出来。
-a :将变量var定义为数组(array)类型。
-i :将变量var定义为整数数字(integer)类型。
-x :将变量var变成环境变量。
-r :将变量var定义成readonly类型,该变量不能被更改内容,不能重设。
declare +x var,将-变成+可以进行取消操作。
bash环境中的数值运算,最多仅能到达整数类型,没有浮点型等。
如果不小心将变量设置为“只读”,通常需要注销再登录才能复原该变量的类型。
数组元素的读取:echo “${var[0]}”。
变量的删除、替代与替换
设var2 = “/k1/k2/k3/k2/k4”
将var2的值赋给var1:var1 = ${var2}。
删除:
${var1#/*k2}
#表示从变量var1的前面开始删除,*为通配符,删除到第一个k2为止
echo ${var1#/*k2},结果为/k3/k2/k4;
将#改为##,${var1#/*k2}
##表示从变量var1的前面开始删除,删除到最后一个k2为止
echo ${var1##/*k2},结果为/k4。
如果要从后面开始删的话,将#改为%。%、%%类似于#、##。
替换:
${var/a/b},将变量var中的第一个字符串a替换成字符串b。
${var//a/b},将变量var中的所有的字符串a替换成字符串b。
var=${var-root},若变量未声明则声明变量,并将root赋给变量var。否则,不改变变量的值。
var=${var:-root},若变量未声明或为空字符串,则将root赋给变量var。否则,不改变变量的值。