您的位置:首页 > 运维架构 > Shell

[笔记]shell变量基础

2015-12-28 13:19 246 查看
变量命名:使用英文,数字及 _ (下划线)组成,开头不能是数字,长度无限制,严格区分大小写

变量设置:变量名=变量值
注意:等号两边无空格
可以把变量值用单引号或双引号括起来
不支持所有中文符号(包括中文的单双引号)
可使用反单引号(Tab键上方) `COMMAND` 或$(COMMAND)来取得COMMAND的输出
使用"\"转义可将特殊字符如\ $ ! 空格符 等变为普通字符
可在script中添加'shopt -s -o nounset'来强制变量必须声明后才能使用,避免误输入

变量值的取得:$变量名 或 ${变量名}
注意:若变量的后面接有其他符合命名规则的字符,必须用 {} 隔开,以免造成shell误判断

变量的取消:(注:当变量属性为只读时无法操作)
unset 变量名或函数名
unset -v 变量名
unset -f 函数名
变量的清空:将变量的内容删除使其值为null(空),但变量仍然存在
变量名=
注意:变量的取消与清空的区别(变量是否存在)

设置时单双引号的区别:
双引号:替换其中的变量,命令执行结果,算术运算结果
注:当要在双引号中使用 $ 符,需要使用 \ 转义
单引号:不进行任何操作

变量类型及作用域:
环境变量:也称全局变量,通常以大写字符表示,所有shell环境都有效
自定义变量:也称局部变量,仅在变量设定时所处的shell中有效,无法影响其他shell环境
子进程仅继承父进程的环境变量
使用 env 命令可以查看系统环境变量
使用 set 命令可以查看所有变量(环境变量和用户自定义变量)
使用" export 变量名 "可将用户自定义变量变为环境变量

只读变量的设置:
readonly 或 readonly -p :显示当前只读属性的变量列表
readonly 变量名 :设置只读变量
readonly -f 函数名 :设定函数不可修改
readonly -a 数组变量 :设定数组变量只读
declare -r 变量名 :设定只读变量
变量属性的调整:
使用declare命令,具体用法自行man查询

变量内容的删除与替换:(图片截自《鸟哥私房菜基础篇》第三版p315)





变量内容的测试与替换:(图片截自《鸟哥私房菜基础篇》第三版p316)





字符串相关处理:
${变量:位置起点} :由指定位置的字符开始截取字符串
${变量:位置起点:长度} ;由指定位置的字符开始截取指定长度的字符串
${@:起点} :由指定起点开始,获取后方{包括起点}的所有位置参数[位置参数说明见补充部分]
${@:起点:个数} :由指定起点开始获取指定个数的位置参数
${#变量名} :获取变量字符串的长度

命令替换:将命令执行后的标准输出存放到变量中
1.变量名=$(COMMAND)
2.变量名=`COMMAND`
注意:法2中COMMAND处不是单引号而是反引号(Tab键上方)
为方便查看,一般建议采用方法1做替换

补充:
$? :上条命令执行返回值,0代表成功,非0代表执行错误
$?的参考值
0 成功退出
>0 退出失败
1-125 命令退出失败,失败返回的相关值由程序定义(如程序内退出执行 exit 2则返回2)
126 命令找到了,但无法执行
127 命令找不到
>128 命令因受到信号而死亡
$$ :当前bash shell进程编号
$! :上一个后台程序的进程编号
以" test.sh A B C " 为例
$# :位置参数的个数,上例中共ABC三个参数,即$#值为3
$* :代表所有位置参数,并且视为一个字符串,上例中$*值为字符串"A B C"
$@ :代表所有未知参数,但代表各参数组成的串行,上例中$@值为"A""B""C"三个字符串
$1-$n :传入程序或函数式的参数,当n>10时需使用${n},上例中test.sh即$0, A即$1, 以此类推

^_^

本文出自 “junight” 博客,请务必保留此出处http://junight.blog.51cto.com/10828785/1729095
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: