Shell脚本学习笔记(二)--变量
2011-03-11 15:17
549 查看
变量与字符串
Bash shell没有所谓的“数据形态”,除非使用内置declare特别指定变量的型态。在Bash shell中,只有一种数据型态:以字符组成的字符串
不必经过事先声明的程序想用就用
设定变量值之后,该变量值只在当前的shell环境中有效。变量名长度无限制,区分大小写。
设定变量的方法:变量名称=值 但好的习惯是把字符串用双引号或单引号括起来。等号的两边不能有空白,右侧有空白时要用引号括起来。
为避免出错,可规定变量一律要先经过设定的程序才能使用。方法:shopt -s -o nounset
取得变量值:$变量名称或${变量名称},如变量的后面接有其他英、数单词或底线,须用{}隔开$和变量名称,如${myname}Mmm 否则,不必
echo printf 显示变量值
取消变量:
unset 变量名 先找变量再找函数
unset -v 变量名 取消变量
unset -f 函数名 取消函数
清空变量:变量名= 其值为null(空),但变量还存在
双引号括起变量可进行:替换变量;替换命令执行结果;替换算术运算结果
单引号的作用是形成一个所见即所得的字符串(写什么就显示什么),不会进行任何替换变量的操作
变量的执行范围,仅在各自的shell环境中有效
使变量成为环境变量,就能为子shell取用 export declare -x 变量=""
取消环境变量:testVar= 或 unset testVar
各种Bash内置变量
只读变量:readonly 变量名 readonly -f 函数名 readonly -a 数组名 declare -r 变量名 declare调整变量属性的方法
别名:alias 别名=指令 不能有空白,右侧有时单引号括起来,可递归定义
取消别名:unalias 别名
数组:下标从0开始,显示或获取某元素值:${数组名[索引值]}
也可以指定个别元素的索引,如:c={[3]=10,[1]=20,[10]=30}
取出数组所有元素:${B[@]} 以空白隔开的 或${B[*]} 一整个字符串
取得数组元素个数:${#数组[@]}或${#数组[*]}
若数组元素是字符串,${#数组[索引]}获得某元素长度
取消数组或数组元素:unset A unset A[i]
利用Here Document,打包C等的原始码。一个携带攻击程序的原型。
高级变量
变量扩展是一种简易的条件判断,对不同的条件赋予变量不同的替换值,即:变量扩展是对基本型加上条件判断,如若条件符合(如不存在或空值),则进行变量替换,若不符合,也有相应做法,它其实是一种隐含的"if-then-else"的程序语法
“变量存在”的定义:如果变量曾设值过,则称变量存在,反之不曾设值过,或曾用unset取消变量,则称变量不存在或未定义
测试变量“存在与否”:${待测变量-默认值}
测试变量“不存在”或其值为空:
“传回”一个默认值 ${待测变量:-默认值} 主要用途:在script中这个变量一定要有值才行,因此变量扩展的结果一定要传回一个非空值(使用默认值或变量值)
[-n #{DEBUG:-}] && set -v
给变量设一个默认值
提示错误信息:${待测变量:?提示信息} 显示变量名称和提示信息,并立即停止执行script
条件式的用途:确保某变量值一定要存在,否则若是继续执行,恐怕会发生严重后果
测试变量的“存在性":${待测变量:+真值} 用来测试某件事是真的
整理小结:
取字符串切片、长度:${变量:位置起点},${变量:位置起点:长度}
取部分位置参数 ${@:起点},${@:起点:个数}
计算长度:${#变量名}
对比样式:
由前面相比,删除最短的${变量#样式};删除最长的${变量##样式}
由后面相比,删除最短的${变量%样式};删除最长的${变量%%样式}
取代或删除部分字符串,只替换第一个对比符合的字符串${变量/样式/替换字符串},全部符合的${变量//样式/替换字符串};只删除第一个对比符合的字符串${变量/样式/},全部符合的${变量//样式/}
整理小结:
获取变量名称列表、数组索引列表:
${!数组变量[@]}或${!数组变量[*]}
${!开头字符串@]}或${!开头字符串*]}
命令替换:变量名=$(命令)或变量名=`命令`,提倡前者
算术扩展:$((算术式)),才会运算,不然就一字符串
Bash shell没有所谓的“数据形态”,除非使用内置declare特别指定变量的型态。在Bash shell中,只有一种数据型态:以字符组成的字符串
不必经过事先声明的程序想用就用
设定变量值之后,该变量值只在当前的shell环境中有效。变量名长度无限制,区分大小写。
设定变量的方法:变量名称=值 但好的习惯是把字符串用双引号或单引号括起来。等号的两边不能有空白,右侧有空白时要用引号括起来。
为避免出错,可规定变量一律要先经过设定的程序才能使用。方法:shopt -s -o nounset
取得变量值:$变量名称或${变量名称},如变量的后面接有其他英、数单词或底线,须用{}隔开$和变量名称,如${myname}Mmm 否则,不必
echo printf 显示变量值
取消变量:
unset 变量名 先找变量再找函数
unset -v 变量名 取消变量
unset -f 函数名 取消函数
清空变量:变量名= 其值为null(空),但变量还存在
双引号括起变量可进行:替换变量;替换命令执行结果;替换算术运算结果
单引号的作用是形成一个所见即所得的字符串(写什么就显示什么),不会进行任何替换变量的操作
变量的执行范围,仅在各自的shell环境中有效
使变量成为环境变量,就能为子shell取用 export declare -x 变量=""
取消环境变量:testVar= 或 unset testVar
各种Bash内置变量
只读变量:readonly 变量名 readonly -f 函数名 readonly -a 数组名 declare -r 变量名 declare调整变量属性的方法
别名:alias 别名=指令 不能有空白,右侧有时单引号括起来,可递归定义
取消别名:unalias 别名
数组:下标从0开始,显示或获取某元素值:${数组名[索引值]}
也可以指定个别元素的索引,如:c={[3]=10,[1]=20,[10]=30}
取出数组所有元素:${B[@]} 以空白隔开的 或${B[*]} 一整个字符串
取得数组元素个数:${#数组[@]}或${#数组[*]}
若数组元素是字符串,${#数组[索引]}获得某元素长度
取消数组或数组元素:unset A unset A[i]
利用Here Document,打包C等的原始码。一个携带攻击程序的原型。
高级变量
变量扩展是一种简易的条件判断,对不同的条件赋予变量不同的替换值,即:变量扩展是对基本型加上条件判断,如若条件符合(如不存在或空值),则进行变量替换,若不符合,也有相应做法,它其实是一种隐含的"if-then-else"的程序语法
“变量存在”的定义:如果变量曾设值过,则称变量存在,反之不曾设值过,或曾用unset取消变量,则称变量不存在或未定义
测试变量“存在与否”:${待测变量-默认值}
测试变量“不存在”或其值为空:
“传回”一个默认值 ${待测变量:-默认值} 主要用途:在script中这个变量一定要有值才行,因此变量扩展的结果一定要传回一个非空值(使用默认值或变量值)
[-n #{DEBUG:-}] && set -v
给变量设一个默认值
提示错误信息:${待测变量:?提示信息} 显示变量名称和提示信息,并立即停止执行script
条件式的用途:确保某变量值一定要存在,否则若是继续执行,恐怕会发生严重后果
测试变量的“存在性":${待测变量:+真值} 用来测试某件事是真的
整理小结:
取字符串切片、长度:${变量:位置起点},${变量:位置起点:长度}
取部分位置参数 ${@:起点},${@:起点:个数}
计算长度:${#变量名}
对比样式:
由前面相比,删除最短的${变量#样式};删除最长的${变量##样式}
由后面相比,删除最短的${变量%样式};删除最长的${变量%%样式}
取代或删除部分字符串,只替换第一个对比符合的字符串${变量/样式/替换字符串},全部符合的${变量//样式/替换字符串};只删除第一个对比符合的字符串${变量/样式/},全部符合的${变量//样式/}
整理小结:
获取变量名称列表、数组索引列表:
${!数组变量[@]}或${!数组变量[*]}
${!开头字符串@]}或${!开头字符串*]}
命令替换:变量名=$(命令)或变量名=`命令`,提倡前者
算术扩展:$((算术式)),才会运算,不然就一字符串
相关文章推荐
- shell 脚本学习笔记-1 终端打印 变量 环境变量
- Shell脚本学习笔记(二)--变量
- shell脚本的作用,shell脚本变量的定义和三种赋值方式【shell脚本的学习笔记一】
- Shell脚本学习笔记001
- shell脚本学习笔记 (文本处理器AWK)
- shell脚本判断当前用户是否为root(学习笔记一)
- Linux系统命令及Shell脚本学习笔记一:Linux简介
- shell脚本学习笔记:通过shell实现linux用户管理和监控
- 【Shell】【学习笔记】Linux Shell脚本应用(五)
- 【Shell】【学习笔记】Linux Shell脚本应用(十)
- Shell脚本学习笔记(八)--进程管理和工作控制
- 【学习笔记--shell】---第一个shell脚本
- shell脚本学习笔记
- 树莓派学习笔记——Shell脚本操作GPIO
- Linux Shell 学习笔记2:Shell变量
- shell脚本学习笔记(一)闹钟的源码
- Shell脚本学习笔记
- LINUX系统学习笔记管道符和作业控制 ,shell变量 , 环境变量配置文件
- Power Shell 学习笔记(三)变量
- Linux学习笔记--bash脚本编程之一变量、变量类型