
在Shell中,管道将一个程序的标准输出作为另一个程序的标准输入,就像用一根管子将一个程序的输出连接到另一个程序的输入一样。
管道的符号是 | ,下面的程序将 cat 的标准输出作为 less 的标准输入,以实现翻页的功能:
有时候我们想要同时将程序的输出显示在屏幕上(或旦备进入管道)和保存到文件中,这个时候可以使用 tee 。
tee 程序的输出和它的输入一样,但是会将输入内容额外的保存到文件中:
上面的例子中, tee 程手迟悉毕乎序将 cat 程序的输出显示在屏幕上,并且在 hello.txt.bk 文件中保留了副本。需要注意的是,如果 tee 命令中指定的文件已经存在,那么它将会被覆盖,使用 -a 选项在文件末尾追加内容(而不是覆盖):
command1 &&command2 只有在 command1 成功执行后才会执行 command2 ; command1 || command2 在 command1 没有成功执行时执行 command2 。
比如下面的命令,会首先执行 sudo updatedb ,如果执行失败,则会执行 echo "update database error." :
工作中用到一个shell脚本内部是循环,在循环内需要更改循环外的颤桐值
简单结构如下
结果是 list_true和list_false肯灶铅定是空
因为管道符的原因,隐洞好会开启子shell,而子shell跟父shell变量不是通用的
解决方案一:
采用如下结构
解决方案二:
将变量存入文件,然后读取文件
自学Linux的过程中做了一点小总结,因此写出来和大家分享一下,希望能共同进步!
Bash shell的特点:
1、 命令的自动补齐:Tab键
2、 命令的顷哪历史记忆功能:上下键;!+数字可以自动找出在history中的相应命令并且执行;!+string可以自动找到最近一个以string开头的命令并且执行;!$指的是上一个命令的最后一个参数;!!指的是上一个命令,因为在脚本中不能进行翻页,所有常作为脚本命令执行,ctrl+R可以搜索历史命令。
3、 别名功能:alias可以查看别名;unalias cp取消别名;~username/.bashrc可以进行永久别名的设置;\cp –rf /etc/hosts表示忽略别名
4、 快捷键:^R搜索历史命令;^D登出系统;^A将光标移到命令开始;^E将光标移到命令结尾^K将光标移到中间删除后半部命令;^U将光标移到中间删除前部分命令;^Y撤销上个 *** 作
5、 前后台作业控制 :命令之后加一个&表示将工作提交到后台执行;命令前加一个nohup可以让该命令在终端关闭之后还可以执行;^C杀死前台正在运行的任务;^Z,将前台工作扔到后台去执行;bg展示后台正在运行的工作,也可以用jobs;fg表示将后台运行的工作调到前台运行;kill %+数字表示杀死后台某一个作业
6、 输入输出重定向:0表示标准输入;1表示标准输出;2表示标准错误,也就是错误输出;>表示写入某一个文件,>>表示追加写入某一个文件2>&1:&表示等同于的意思,2>&1,表示2的输出重定向等同于1,即和1重定向的文件系统上的位置是一样的cat <<EOF >file:EOF是一个从标准输入传递命令给cat的标志,执行结束的命令输出到file文件中保存
7、 Tee管道,相当于一个三通,可以在特定地方截取管道命令的输出信息。
管道文件不同于常用文件,管道文件就跟水一样是一个动态的文件,每个时间点打开管道文件查看都能看到不一样的东西,而常用文件只要不进行更改都是一样雀猛码的内容,另外管道文件都遵循一个原则:先进先出后进后出,顾名思义就是先被管道接受的东西首先被记录。
另:
关于命名知含管道与匿名管道的区别:创建命名管道:mkfifo +管道名字
8、 命令排序:
不具备逻辑判断能力:分号
具备逻辑判断能力:&&和 ||
注意:
Command & 后台执行
Command &>/dev/null 混合重定向
Command1 &&Command2 命令排序,具备逻辑判断能力
9、 shell通配符(元字符,即表示的不是本意)
*匹配任意多个字符
?匹配任意一个字符
[]表示匹配括号内的任意一个字符:[abc]表示匹配abc中的任意一个,而[^abc]表示除了abc之外的任意一个字符。
(command)在子shell中执行命令
{}将几个元素括起来表示一个集合,可以用来批量创建和删除文件
\ 转义字符,让元字符回归本意
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)