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

shell脚本编程-特殊字符

2015-09-22 16:13 537 查看
Shell中除了普通字符外,还有很多具有特殊含义和功能的字符

1.通配符

* : 任意长度的字符串

? : 匹配任一单个字符

[]: 匹配其中的任意一个字符,例如:[abc]匹配a或b或c, 也可这样表示[a-z], 但 '-' [] 外只是一个普通字符, * ? 在[]中也变成了普通字符.

2.引号

单引号' : 称为 强引用 或 全引用, 在'...' 中的所有字符都视作普通字符,包括($)(\)(`),但 ' 不能出现在'...'中,否则shell无法判断单引号的起始位置.

双引号": 称为 弱引用 或 部分引用, 在"..."中除了($)(\)(`)保留其特殊用途外,其余字符都作为普通字符处理.

3.注释符

# : 以#开头的部分Shell解释器都会略过.但#!除外.

#!: 其后跟执行此脚本的可执行程序(解释器),而且#!必须在脚本的第一行.

4.大括号

在shell中{}用法很多,最常用的就是 引用变量原型 例如:${VAR}(这是推荐引用变量的方法)

大括号的变量扩展:

${VAR}取出变量VAR的值
${VAR:-DEFAULT}如果VAR没有定义,则以$DEFAULT作为其值
${VAR:=DEFAULT}如果VAR没有定义,或者值为空,则以$DEFAULT作为其值
${VAR+VALUE}如果定义了VAR,则值为$VALUE,否则为空字符串
${VAR:+VALUE}如果定义了VAR并且不为空值,则值为$VALUE,否则为空字符串
${VAR?MSG}如果VAR没有被定义,则打印$MSG
${VAR:?MSG}如果VAR没有被定义或未赋值,则打印$MSG
${!PREFIX*}

${!PREFIX@}

匹配所有以PREFIX开头的变量
${#STR}返回$STR的长度
${STR:POSITION}从位置$POSITION处提取字串
${STR:POSITION:LENGTH}从位置$POSITION处提取长度为$LENGTH的字串
${STR#SUBSTR}从变量$STR的开头处开始寻找,删除最匹配$SUBSTR的字串
${STR##SUBSTR}从变量$STR的开头处开始寻找,删除最匹配$SUBSTR的字串
${STR%SUBSTR}从变量$STR的结尾处开始寻找,删除最匹配$SUBSTR的字串
${STR%%SUBSTR}从变量$STR的结尾处开始寻找,删除最匹配$SUBSTR的字串
${STR/SUBSTR/REPLACE}使用$REPLACE替换第一个匹配的$SUBSTR
${STR//SUBSTR/REPLACE}使用$REPLACE替换所有匹配的$SUBSTR
${STR/#SUBSTR/REPLACE}如果$STR以$SUBSTR开始,则用$REPLACE来代替匹配到的$SUBSTR
${STR/%SUBSTR/REPLACE}如果$STR以$SUBSTR结束,则用$REPLACE来代替匹配到的$SUBSTR
5.通配符扩展: (匹配多个排列组合的可能)

比如坐标:{x1,x2,x3}{y1,y2,y3}

# echo {x1,x2,x3}{y1,y2,y3}
x1y1 x1y2 x1y3 x2y1 x2y2 x2y3 x3y1 x3y2 x3y3


比如文件名:

# touch file_{1,2}
# ls file_{1,2}
file_1  file_2


6.语句块

大括号还用于构造语句块,语句之间使用回车隔开

7.控制字符:(即Ctrl+KEY组合键一起使用,用于修改终端或文本显示,【控制字符不能再脚本中使用,只能与shell进行交互使用】)

如表:

Ctrl+B退格但是不删除掉前面的字符
Ctrl+C终结当前前台作业
Ctrl+D结束符,可用于退出当前Shell或结束当前输入
Ctrl+G系统输出一声鸣叫
Ctrl+H退格且删掉前面的字符
Ctrl+L清屏,和clear效果一样
Ctrl+I水平制表符
Ctrl+K垂直制表符
Ctrl+J另起一行
Ctrl+M回车
Ctrl+Z暂停前台作业
Ctrl+V在vim中操作Visual Block
Ctrl+U删除光标到行首的所有字符
8.其他

反引号 `: 命令替换,和$()的作用相同,表示返回当前命令的执行结果并赋值给变量

位置参数:
$0:脚本名本身

$1、$2...${10}:脚本的第一个参数、第二个参数....第十个参数

$#:变量总数.

$*、$@:显示所有的参数.

$?:前一个命令的退出的返回值.

$!:最后一个后台进程的ID号.

感叹号:通常为逻辑反,也可用于执行history中某个命令:例如:!100【为hsitory中行号为100的命令】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: