shell 知识点小结

2019-04-11  本文已影响0人  Summer_90

对 shell 知识点做一个规整

输出重定向

命令 说明
command > file 将输出重定向到 file
command < file 将输入重定向到 file
command >> file 将输出以追加的方式重定向到 file
n > file 将文件描述符为 n 的文件重定向到 file
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file
n >& m 将输出文件 m 和 n 合并
n <& m 将输入文件 m 和 n 合并
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入
$command > /dev/null 将命令的输出重定向到 /dev/null 中

/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。
如果希望屏蔽 stdout 和 $ command > /dev/null 2>&1

特殊shell变量

变量 说明
$0 脚本名字
$1 位置参数 #1
2 ~9 位置参数 #2 - #9
${10} 位置参数 #10
$# 位置参数的个数
"*" 和 "@" 所有的位置参数
{#*} 和{#@} 传递到脚本中的命令行参数的个数
$? 脚本返回值
$$ 脚本的进程ID(PID)
$- 传递到脚本中的标志(使用set)
$_ 之前命令的最后一个参数
$! 运行在后台的最后一个作业的进程ID(PID)

二元比较

命令 说明
-eq | = | == 等于
-ne | != 不等于
-lt | < 小于
-gt | > 大于
-ge | >= 大于等于
-le | <= 小于等于
-z 字符串为空
-n 字符串不为空

文件测试类型

命令 说明
-e 文件是否存在
-s 文件大小不为0
-f 是一个标准文件
-d 是一个目录
-r 文件有读权限
-w 文件有写权限
-x 文件有执行权限
-h 文件是一个符号链接
-L 文件是一个符号链接
-b 文件是一块设备
-c 文件是一个字符设备
-g 设置了sgid标记
-p 文件是一个管道
-u 设置了suid标记
-S 文件是一个socket
-k 设置了"粘贴位"
-t 文件与一个终端相关联
-N 从这个文件最后一次被读取之后, 它被修改过
-O 这个文件的宿主是你
-G 文件的组id与你所属的组相同
F1 -nt F2 文件F1比文件F2新
F1 -ot F2 文件F1比文件F2旧
F1 -ef F2 件F1和文件F2都是同一个文件的硬链接
"非" ,取反

参数替换和扩展

命令 说明
${var} 变量var的值, 与$var相同
${var-DEFAULT} 如果var没 有被声明, 那么就以$DEFAULT作为其值
${var:-DEFAULT} 如果var没 有被声明, 或者其值为空, 那么就以$DEFAULT作为其值
${var=DEFAULT} 如果var没 有被声明, 那么就以$DEFAULT作为其值
${var:=DEFAULT} 如果var没 有被声明, 或者其值为空, 那么就以$DEFAULT作为其值
${var+OTHER} 如果var声 明了, 那么其值就是$OTHER, 否则就为null字符串
${var:+OTHER} 如 果var被设置了, 那么其值就是$OTHER, 否则就为null字符串
${var?ERR_MSG} 如果var没 被声明, 那么就打印$ERR_MSG
${var:?ERR_MSG} 如果var没 被设置, 那么就打印$ERR_MSG
${!varprefix*} 匹配之前所有以varprefix开头进行声明的变量
${!varprefix@} 匹配之前所有以varprefix开头进行声明的变量
${#string} $string的长度
${string:position} string中, 从位置position开始提取子串
${string:position:length} string 中, 从位置position开始提取长度为$length的子串
${string#substring} 从 变量string的开头, 删除最短匹配substring的子串
${string##substring} 从 变量string的开头, 删除最长匹配substring的子串
${string%substring} 从 变量string的结尾, 删除最短匹配substring的子串
${string%%substring} 从 变量string的结尾, 删除最长匹配substring的子串
${string/substring/replacement} 使用replacement, 来代替第一个匹配的substring
${string//substring/replacement} 使 用replacement, 代替所有匹配的substring
${string/#substring/replacement} 如 果string的前缀匹配substring, 么就用replacement来代替匹配到的substring
${string/%substring/replacement} 如果string的后缀匹配substring, 么就用replacement来代替匹配到的substring
expr "string" : 'substring' 匹配string开头的substring* 的长度
expr index "string"substring string中匹配到的substring的第一个字符出现的位置
expr substr stringposition $length string中从位置position开始提取长度为$length的子串
expr match "string" '\(substring)' string的 开头位置提取substring*
expr "string" : '\(substring)' string的 开头位置提取substring*
expr match "string" '.*\(substring)' string的 结尾提取substring*
expr "string" : '.*\(substring)' string的 结尾提取substring*

shell 中的 括号们

上一篇 下一篇

猜你喜欢

热点阅读