shell学习笔记之二(变量)
是一种弱类型的变量,声明时不需要指定其变量类型,也不需要遵循“先声明后使用”,任何时候只要想用就可以用。
局部变量
在某个shell中生效的变量,在其他shell中无效。可以使用local内建命令来“显示”的声明局部变量
环境变量
shell脚本中,默认是全局的
预设的环境变量:
BASH:说明bash的全路径
BASH_VERSION
CDPATH:用于快速进入目录
EUID:记录当前用户的UID
FUNCNAME :在用户函数体内部,记录当前函数体的函数名
HISTCMD:记录下一条命令在history命令中的编号
HISTFILE:记录history命令的记录文件的位置
HISTFILESIZE
HOSTNAME
HOSTTYPE:主机架构
MACHTYPE:主机类型的GNU标示
LANG:语言环境
PWD:记录当前目录
OLDPWD:记录之前目录
PATH
PS1:
命令提示符,默认是[\u@\h \W]\$,其中\u是用户名,\h是主机名,\W是当前工作目录的basename,\$是用户UID的替换字符。
定义和使用变量
var=value
注意:
1、=两边没有空格 var = value(X)
2、变量中有空格时必须要用””或’’引起来
取值:${var}或者$var
注意:
1、如果变量值引用的是其他变量,则必须使用双引号。因为单引号会阻止shell解释特殊字符$。
2、由于shell是弱变量特性,因此即使在脚本中没有定义变量也是可以引用的,从而使得错误很难找到。
3、shell具有弱变量的特性,不需要声明就可以使用,可以设置变量必须先声明再使用
shopt -s -o nounset
取消变量
unset var
取消函数
unset function
特殊变量
位置参数
$1,...,$n 当n>10时,需要写成$(n)
$0
$@/$* 脚本所有的参数
$# 脚本参数总和
脚本或命令返回值
$? 上一个命令的返回值,要查看某个命令的返回值必须在运行中个命令后立即查看$?
linux中规定正常的退出命令和脚本应该以0作为其返回值,任何非0的返回值都表示命令未正确退出或正常执行
在自动化脚本中,也可以通过$?变量的值判断之前命令的执行状态,从而采取不同的动作
数组
shell变量是弱类型的,并不要数组的每一个元素都是相同的类型,shell中的数组对元素个数没有限制,但是只支持一维数组
shell对于数组变量的声明非常宽松,随时都可以根据需要增加变量中的元素
定义
declare -a array
初始化
array[0]=0
array[1]=1
array[2]="hello"
或
declare -a array=(0 1 "hello")
array[3]=‘waNG‘
或
array=(‘john‘ ‘sue‘)
或
array=([3]=3 [4]=4 [7]=4)
跳号赋值
数组操作
取值
${arrayname[index]}
例:
1、echo ${array[0]} //取单个元素
2、echo ${array[@]} //取所有的元素值,得到的是以空格隔开的元素值
3、echo ${array[*]} //取所有的元素值,得到是一整个字符串
4、arr1=arr2 //这样相当于arr1=arr2[0]
长度
利用@或*可以将数组扩展成列表,然后使用#来获取数组元素的个数
例:
1、echo ${#array[@]}
2、echo ${#array[*]}
通过本例也就知道了求字符串的长度,${#string}
截取
截取某个元素的一部分,对象可以是整个数组或某个元素
例:
1、取出数组的第一,第二个元素
echo ${array[@]:1:2}
2、取出第二个元素从第0个开始连续5个字符
echo ${array[2]:0:5}
连接
conn=(${arr1} ${arr2})
替换数组元素
array=(${array[@]/old/new})
取消数组或元素
unset array[0]
unset array
只读变量
readonly RO=100
等效于:declare -r RO=100
变量的作用域
1、shell变量的作用域是在本shell内,属于本shell的全局变量,也就是从定义该变量的地方开始到shell结束,或者主动使用unset删除了该变量的地方为止。
2、在函数题内使用local关键字声明了和全局变量同名的局部变量后,对该变量的操作只会影响局部变量,而不会影响与之同名的全局变量。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。