Bash符号用途的小结
$
调用变量
- 调用变量,一般
$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变量分开每个值.
懒得总结快捷键了,请参考Ref8好了. ╮(╯▽╰)╭
Reference
- Shell中比较判断,控制,循环和函数
- Shell变量,数组,运算及操作
- 正则表达式
- Advanced Bash-Scripting Guide
- IBM-对话 UNIX:!$#@*%
- Linux下高效编写Shell——shell特殊字符汇总
- 感叹号提高Bash下效率——历史扩展(bang命令)
- Linux下更高效的使用Bash——快捷键
No comments:
Post a Comment