| 导读 |
本文为博文 linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展。(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) |
| 目录 |
Shell 中有3种变量:用户变量、位置变量、环境变量
用户变量就是用户在Shell编程过程中定义的变量,分为全局变量和局部变量。默认情况下,用户定义的变量为全局变量,如果要指定局部变量,需要使用local限定词
1)Shell 中的特殊符号:
特殊字符列表如下:
~ 主目录,相当与$HOME
` 命令替换,如 echo `pwd`
# 脚本注释
$ 变量表达式符号
& 后台作业,将此符号置于命令末端则让命令与后台运行
* 字符串通配符
( ) ( 启动子Shell ) 停止子Shell
\ 转义下一个字符
| 管道
[ ] [ 开始字符集通配符号 ] 结束字符集通配符号
{ } { 开始命令块 }结束命令块
; Shell 命令分隔符
' " 强引用 和 弱引用
> < 输出重定向 和 输入重定向
/ 路径名目录分隔符
? 单个任意字符
! 管道行逻辑 NOT
变量的表达方式 $var 实际上是 ${var} 的简写形式,{}的形式好处如: ${10} ${Var}_ 以及可以进行下面的字符串高级操作
2)字符串操作符
字符串处理运算符允许你完成如下操作:
- 保证变量存在且有值
- 设置变量的默认值
- 捕获未设置变量而导致的错误
- 删除匹配模式的变量的值部分内容
替换运算符:
${varname:-word} varname 存在且非null,返回varname , 否则返回word (未定义返回默认值)
${varname:=word} varname 存在且非null,返回varname , 否则返回word,并且将varname 置为word (未定义设置默认值)
${varname:?message} varname 存在且非null,返回varname , 否则打印 message , 并退出当前脚本。
message 默认为parameter null or not set (捕捉未定义而导致的错误)
${varname:+word} varname 存在且非null,返回 word; 否则返回 null (测试变量是否存在)
模式匹配运算符:
${varname#pattern} 如果模式匹配变量值取值的 开头 处,则删除匹配的最 短 部分,并返回剩下部分
${varname##pattern} 如果模式匹配变量值取值的 开头 处,则删除匹配的最 长 部分,并返回剩下部分
${varname%pattern} 如果模式匹配变量值取值的 结尾 处,则删除匹配的最 短 部分,并返回剩下部分
${varname%%pattern} 如果模式匹配变量值取值的 结尾 处,则删除匹配的最 长 部分,并返回剩下部分
${varname/pattern/str} 替换第一个匹配的部分, 如果模式以#开头则匹配varname开头,%开头 则结尾
${varname//pattern/str} 替换所有匹配的部分
str 为空则删除匹配部分,varname 为@或* 则依次应用于每个参数并拓展为结果列表
例子:line="arg=123" : echo ${line%=*} echo ${line#*=}
$# $? $0 $* 分别表示传递给本脚本的 参数个数、上一条命令的返回值、第一个参数、所有参数
shift : Shell 内置命令,可以截去参数列表最左边一个
#!/bin/bash # 依次读取打印文件 while [ -e $1 ]; do cat $1 shift done