美文网首页
shell 知识点小结

shell 知识点小结

作者: Summer_90 | 来源:发表于2019-04-11 16:17 被阅读0次

对 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 中的 括号们

  • 圆括号
    • ( command1; command2 ) 子shell中 执行的命令组
    • Array=(element1 element2 element3) 数组初始化
    • result=$(COMMAND) 在子shell中执行命令, 并将结果赋值给变量(命令替换)
    • >(command) <(command) 进程替换【把一个命令的结果发送给另一个命令,类似于 管道】
    • var=$(( 20 + 5 )) 整型运算, 并将结果赋值给变量
  • 中括号
    • if [ command ] 测试结构 test命令的简写
    • if [[ command ]] 扩展测试结构,可以进行字符串高级比较和正则匹配
    • array[1] 做数组下标,取出数组中的元素
    • [ a-z ] 正则表达式,表取值范围
    • $[1+5] 可作为数字计算,如 n=$[$n+1] ,类似于 $n++
  • 大括号
    • ${variable} 参数替换 , 如 ${11} 表示第11个参数
    • ${!variable} 间接参数引用
    • { command1; command2; . . . commandN; } 代码块
    • {string1,string2,string3,...} 大 括号扩展

相关文章

  • shell 知识点小结

    对 shell 知识点做一个规整 输出重定向 /dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果...

  • shell 小结

    正则表达式 ^以..开头 $以..结尾 ^$空行 . 代表任意一个字符 *重复0个或多个前面字符 ^ .* 以...

  • Linux中执行shell脚本的4种方法(转)

    bash shell 脚本的方法有多种,现在作个小结。假设我们编写好的shell脚本的文件名为hello.sh,文...

  • 2017 知识小结

    知识点小结: 1.[[[UIApplication sharedApplication] keyWindow] e...

  • linux软件安装以及vim

    shell就是一个“翻译官”让我们能与内核交流沟通: shell分类shell补充知识点:mkdir 创建文件夹m...

  • Vim、Shell小结

    管道符、重定向 管道符 "|":将前一个命令的标准输出当作后一个命令的标准输入 输入输出重定向:>与< 命令行通配...

  • shell脚本小结

    心得:shell脚本可读性非常差,编写完之后应该有相应的注释,是否之后修改起来会非常麻烦。 #set 查看bash...

  • 反弹shell小结

    本文仅作为学习记录,如果侵权,请联系删除。 概念理解: 反弹shell(reverse shell),就是控制端监...

  • mac下python相关环境搭建(python开发必经之路之ma

    小结 本篇文章是对上一篇文章《MacOS的小结及终端shell的选择和相关配置全过程(zsh+iTerm2+pow...

  • ADB调试大全

    这篇文章我们将分4个小结开始,解释ADB命令 1. 基础命令2. 非shell命令3. shell命令4. 进程命...

网友评论

      本文标题:shell 知识点小结

      本文链接:https://www.haomeiwen.com/subject/ortxwqtx.html