Shell脚本和编程(三) | 青训营笔记

84 阅读1分钟

今天是参加笔记活动的的第10

运算符和引用

类型符号作用用法
算术运算符+ - * / %&常规运算
逻辑运算符&& !
比较运算符== != < >
引号双引号""部分引用,仅仅$`\保留作用foo="${a}123"
引号单引号''完全引用,原样输出foo='foo$a'
引号反引号`` `执行命令foo= ``ls -a`
圆括号(())算术运算foo=$((1+2))
圆括号()执行命令$(ls -a)
命令连接cmd1执行完且返回码非0,则继续执行cmd2cmd1cmd2
命令连接&&cmd1执行完且返回码为0,则继续执行cmd2cmd1 && cmd2
命令连接;cmd1,cmd2串行执行cmd1 ; cmd2
后台运行&让命令在后台运行,可与nohup一起使用cmd &

双引号:部分引用,使用这种引用时,$、`(反引号)、(转义符) 这 3 个还是会解析成特殊的意义 单引号:完全引用,只原样输出 反引号:执行命令 cmd & 实现让命令在后台运行 使用方法一的时候,当我们关闭终端,命令就会停止运行。加上nohup可以在关闭终端后不停止命令

管道

管道与管道符|,作用是将前一个命令的结果传递给后面的命令

语法

cmd1 | cmd2

要求

管道右侧的命令必须能接受标准输入才行,比如grep命令,ls,mv等不能直接使用,可以使用xargs预处理

注意

管道命令仅仅处理stdout,对于stderr会予以忽略,可以使用set -o pipefail 设置shell遇到管道错误退出

#!/bin/bash
cat platform.access.log | grep ERROR
netatat -an | grep ESTABLISHED | wc -l
find . -maxdepth 1 -name "*.sh" |xargs ls -l

如果需要互通,比如第一个命令的返回传递给第二个命令,就需要用到管道了,管道的本质就是将多个程序进行了一个连接,和信号一样,也是进程通信的方式之一

重定向

输出重定向符号

> 覆盖写入文件

>> 追加写入文件

2> 错误输出写入文件

&> 正确和错误输出统一写入到文件中