shell脚本编程-特殊字符
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的命令】