$
调用变量
- 调用变量,一般
$var
即可,和字符连接时最好用${var}
- 在正则表达式中被定义为行末
- 特殊变量.例如下面的
$n
n是整数,参数变量(像脚本输入选项)和函数参数的调用$*
所有参数变量,"$*"
是一个字符串$@
所有参数变量,"$@"
还是逐个逐个的返回变量$?
上次命令运行的返回值$$
进程ID变量,这个变量保存了运行当前脚本的进程ID值。
!
非,历史操作
[ ! -z $a ]
判断表达式中的否逻辑!(*.pdf)
匹配内容外的其余内容,这里是非pdf文件[!123]
表示非指定字符外的任意单字符!=
字符串不等于.- bang命令,操作历史命令,不能用于脚本!只能在命令行使用. 更多请参考Ref7.
!grep
执行最近执行的开头匹配的命令!n
n为数字,执行历史编号(history
)第n的命令!-n
执行之前第几条命令,!-1
等于!!
!!
执行上一条命令!?command?
执行回检最近的符合的指令.完全匹配可以忽略最后的?
.!!:s/a/b/
将上条命令的a变为b(一次)!!:gs/a/b/
将上条命令的a变为b(全部)^a^b
将上一条命令的a变为b,等价于!!:s/a/b/
^a
删掉上一命令的a!#
重复当前命令的前面部分.如ls ~ !#
等价于ls ~ ls ~
(有何用?)
&
背景,and
- 加在命令最后,表示背景运行
- 在
[[ ]]
中&&
表与and操作. - 在命令后面的
&&
表示当前面命令返回正确时则执行后面的命令
{}
变量名,逐个扩展,代码块
- 变量名调用时定义变量名
- 大括号扩展,逐一输出组合情况.如
a-{a,b,c}
会输出aa ab ac.大括号内不许留空格,除非在字符串内或转义. - 字符列表扩展,
{a..h}
会逐一输出这些字符,只支持a-z,A-Z,0-9这样.大括号内不允许留空格.其实是特殊的大括号扩展.bash3后引进. - function中的代码块
[]
判断运算,数组号,指定单匹配
[ ]
判断表达式,\<\>
需要转义[[ ]]
带有模式匹配的判断表达式,<>
不需转移,支持&& ||
逻辑操作,变量可不需要$
.array[n]
调用数组元素[!123]和[a-h]
中表示任一匹配的单字符$[3+7]
将运算结果返回
()
运算,调用
- 优先运算
array=(1 2 3)
定义数组((1+2))
数值计算,可以作为判断条件,非0时为真.注意不返回计算结果.a=$(date)
直接调用函数并运行,将结果像变量一样返回.类似于` `
a=$((3+7))
输出运算结果并返回
*
通配,乘
- 任意数量字符的通配符
*
乘法和**
乘方(expr中不支持乘方,乘法也要转义)- 在
"$*"
表示将所有参数变量作为一个字符串返回 - 正则表达式中可以作为字符限定符,表示其前面的匹配规则匹配任意次.
?
匹配
- 单字符通配符
$?
上次指令的返回值.0为正常返回.- 正则表达式中,表示匹配其前面规则0次或者1次
.
目录
.
和..
代表当前和上级目录. hello.sh
相当于source命令,当前shell加载脚本.avi
linux隐藏文件前缀- 正则表达式中,点号表示任意一个字符。
""
字符串
- 字符串,
$
会起效,用来表达''
''
字符串
- 字符串,但
$
变量化失效,但转义起效.还用在可以用来表达""
.
` `
执行
- 执行里面的指令.
|
管道
- 管道,将上一命令的结果用作下一命令的输入
- 在
[[ ]]
中||
表或操作. - 在命令后面的
||
表示当前面命令返回否时则执行后面的命令
>
重定向,大于
- 重定向输出stdout,
>
存在则覆盖,>>
追加 1>
和2>
,前者stdout,后者stderr.2>&1
错误重定向到stdout文件- 大于,在
[]
中要转义,[[]]
中不需要
<
重定向,小于
- 重定向输入
- 小于,在
[]
中要转义,[[]]
中不需要
@
表示逐一
$@
表示所有参数变量,即使加了""
依然逐个处理.${@:3}
同上,指第三参数开始所有参数变量
#
注释,左起匹配
- 注释
${#var}
中表返回长度数量,${#array[*]}
数组元素数量${字串#匹配字串}
左起匹配的最短字符串(支持*
等)的删去,像/home/hi/abc.txt
的${var#*/}
是home/hi/abc.txt
${字串##匹配字串}
左起匹配的最长字符串(支持*
等)的删去,上例,${var##*/}
是abc.txt
${变量1/#查找字符/替换字符}
左起匹配的替换,可以不输入#
也行
%
求余,右起匹配
- 求余运算
5%1
${字串%匹配字串}
右起匹配的最短字符串(支持*等)的删去,像/home/hi/abc.txt
的${var%.*}
是/home/hi/abc
${字串%匹配字串}
右起匹配的最长字符串(支持*等)的删去,像/home/hi.ok/abc.txt
的${var%%.*}
是/home/hi
${变量1/%查找字符/替换字符}
右起匹配的替换
/
表示分隔,除法,替换
- linux/mac下目录符
- 数学运算中的除法
${变量1/查找字符/替换字符}
或sed等正则式中表示分隔.${变量1//查找字符/替换字符}
将所有查找到的字符替换为替换字符串
\
转义
- 转义符,例如
\n\t
输出换行和tab,\\
输出\
. - 在行末使用
\
可以转义换行符,从而使下一行相当于续行.
~
特殊目录
- 相对路径中表示用户目录
~+
当前目录,相当于pwd~-
上次所在目录,相当于-
^
正则行首符
- 在正则表达式中,行首位置标志符;
^a^b
将上一条命令的a变为b,bang命令^a
删掉上一命令的a,bang命令- bash4后,
${var^},${var^^}
表示首字符大写和全部大写.不建议使用
;
语句终结和分隔
- 同一行多个语句分隔符
;;
case语句选项的终结符
,
- 在表达式中前后均执行,但只返回最后一句.如
let k=((a=3,b=4))
- 在bash4以后,
${a,},${a,,}
表示首字符小写和全部小写.不推荐使用.
+
加号
- 数学运算的加法
- 在正则表达式中,表示的是其前的这个匹配规则匹配最少一次;
-
相减,参数选项,范围
- 数学运算的减法
-l --help
命令选项- 相对路径中表示上一次所在的目录
[a-h]
中表示范围.[ -f abc.txt ]
在判断表达式中控制选项,数学比较-eq,-nq
,逻辑-o,-a
等.
=
赋值或相等
a=1
变量赋值[ a = b ]
字符串相等比较,==
等价.
:
表示位置,空命令
${var:3}
表示第四个字符起的字符串(因为从0起),支持负数表达反向${var:开始位置:结束位置}
某个范围内字符串.不支持负数${@:3}
中表示第三个起以后的项- 总返回0的空命令,可替代true用于while循环,也可用于空语句块避免语法错误.
- unix系统的域分界符,如PATH变量分开每个值.