Linux 多命令语句与重定向
多命令语句
Linux中我们在shell输入命令一般是一条一条执行,但是我们同样可以用一行语句写出多命令,下面就举出几个常见的方法
“;”分号用法
方式:command1 ; command2
用;号隔开每个命令, 每个命令按照从左到右的顺序,顺序执行, 彼此之间不关心是否失败, 所有命令都会执行。
例如:
root@Ksha:~/桌面/test# ls
1.txt 2.txt root@Ksha:~/桌面/test# ls -l 1.txt;ls -l 2.txt
-rwxrw-rw- 1 root root 0 8月 3 14:37 1.txt
-rwxrw-rw- 1 root root 0 8月 3 14:37 2.txt root@Ksha:~/桌面/test# ls -l 3.txt;ls -l 2.txt
ls: 无法访问'3.txt': 没有那个文件或目录
-rwxrw-rw- 1 root root 0 8月 3 14:37 2.txt
首先我们可以看到test文件夹里面只有两个文件
第二条命令
ls -l 1.txt;ls -l 2.txt
正常执行没问题
第三条命令
ls -l 3.txt;ls -l 2.txt
仍然可以执行,即使目标文件夹没有3.txt文件,并且报错但是不影响该命令后半部分的执行
这就是分号的作用 命令从左到右顺序执行,无论是否失败,所有命令都会执行
“| ”管道符用法
上一条命令的输出,作为下一条命令参数
方式:command1 | command2
我们经常使用这条命令来简化一些操作下面举例
例如我们想查看当前的网络状态 使用命令netstat会发现一下子出来好多数据,那比如我们要查看18565端口的运行情况呢?难道一个一个找吗?
我们可以使用下面这个命令
root@Ksha:~/桌面/test# netstat|grep "18565"
unix 3 [ ] STREAM CONNECTED 18565 /var/run/dbus/system_bus_socket
grep语句可以正则匹配
我们来看看这条命令 首先netstat显示出网络状态 然后管道符后面的 grep "18565" 则是对于前面的netstat命令得到的结果进行正则匹配 然后显示结果
所以管道符用法就是上一条命令的输出,作为下一条命令参数
所以如果两条命令有一个不成立 另一个自然也不会有什么结果
“&”符号用法
&放在启动参数后面表示设置此进程为后台进程
方式:command1 &
默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个'&'实现这个目的。
“&&”符号用法
shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 $? 中。当 $? == 0 时,表示执行成功;当 $? == 1 时(我认为是非0的数,返回值在0-255间),表示执行失败。
有时候,下一条命令依赖前一条命令是否执行成功。如:在成功地执行一条命令之后再执行另一条命令,或者在一条命令执行失败后再执行另一条命令等。
语法格式如下:
command1 && command2 [&& command3 ...]
命令之间使用 && 连接,实现逻辑与的功能。
只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。
只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。
root@Ksha:~/桌面/test# ls -l 3.txt&&ls -l 2.txt
ls: 无法访问'3.txt': 没有那个文件或目录
例如此条命令 因为该文件没有3.txt文件,所以后面的ls -l 2.txt命令也不会执行
“||”符号用法
“||”符号用法则是逻辑”或“
语法格式如下:
command1 || command2 [|| command3 ...]
命令之间使用 || 连接,实现逻辑或的功能。
root@Ksha:~/桌面/test# ls -l 1.txt||ls -l 2.txt
-rwxrw-rw- 1 root root 0 8月 3 14:37 1.txt
root@Ksha:~/桌面/test# ls -l 3.txt||ls -l 2.txt
ls: 无法访问'3.txt': 没有那个文件或目录
-rwxrw-rw- 1 root root 0 8月 3 14:37 2.txt
我们来分析下这两条命令 第一条的前半部分已经可以执行,所以不执行后半命令;第二条命令前半部分不可执行,所以尝试执行后半部分的命令
从结果来看,”||"作用就是命令从左至右若有一条命令可以执行,之后的命令就都不执行
Shell 输入/输出重定向
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。
重定向命令列表如下:
| 命令 | 说明 |
|---|---|
| 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 之间的内容作为输入。 |
需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。
输出重定向
重定向一般通过在命令间插入特定的符号来实现。特别的,这些符号的语法如下所示:
command1 > file1
上面这个命令执行command1然后将输出的内容存入file1。
例如我们直接执行命令 netstat -pantu
root@Ksha:~/桌面/test# netstat -pantu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:68 0.0.0.0:* 606/dhclient
那么我们想让这些结果保存在文件中怎么办
可以执行
root@Ksha:~/桌面/test# netstat -pantu>3.txt
执行后,并没有在终端输出信息,这是因为输出已被从默认的标准输出设备(终端)重定向到指定的文件。
我们打开3.txt看下结果

注意任何file1内的已经存在的内容将被新内容替代。如果要将新内容添加在文件末尾,请使用>>操作符。
输入重定向
和输出重定向一样,Unix 命令也可以从文件获取输入,语法为:
command1 < file1
这样,本来需要从键盘获取输入的命令会转移到文件读取内容。
注意:输出重定向是大于号(>),输入重定向是小于号(<)。
例如我们先在3.txt中写上几个文件名

然后我们执行命令:
root@Ksha:~/桌面/test# ls -l<3.txt
总用量 4
-rwxrw-rw- 1 root root 0 8月 3 14:37 1.txt
-rwxrw-rw- 1 root root 0 8月 3 14:37 2.txt
-rw-r--r-- 1 root root 18 8月 4 18:15 3.txt
发现会该命令会直接读取3.txt中我们刚写入的几个文件名
我们还可以同时替换输入和输出,执行command1,从文件infile读取内容,然后将输出写入到outfile中。
command1 < infile > outfile
可以自己多尝试练习
">&"组合使用
>&可以起到合并输出的效果
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
- 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
- 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
- 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。
2 表示标准错误文件(stderr)。
如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写:
command > file 2>&1
例如 如果我们直接执行下面这个命令(当前目录不存在4.txt)
root@Ksha:~/桌面/test# ls -l 3.txt 4.txt>5.txt
ls: 无法访问'4.txt': 没有那个文件或目录
会发现首先命令行中提示一个错误 并且在5.txt中有一个输出

那么我们不想错误文件出现在命令行而是跟结果一起出现在5.txt中怎么办?
我们可以执行这个命令:
root@Ksha:~/桌面/test# ls -l 3.txt 4.txt>5.txt 2>&1
会发现此时并没有报错我们再打开5.txt看看里面是什么

好的我们已经实现了这个功能
多命令语句与重定向结合使用需要多练习才会熟练的运用
Linux 多命令语句与重定向的更多相关文章
- linux实用命令语句
du -sh ./* 作用:检索当前目录下的所有文件及文件夹的大小,或者"du -sh 文件名/*","du -sh 文件夹名/*"查看某个文件或文件夹的大小 ...
- Linux常见命令语句
查看当前目录: pwd 查看文件具体大小: ls -l 返回上一级: cd.. 返回根目录: cd / 创建一个隐藏文件 vim .test 显示隐藏文件:ls -a 编辑文件: 1.vim 文件名 ...
- Python之路【第一篇】Linux常见命令语句
查看当前目录: pwd 查看文件具体大小: ls -l 返回上一级: cd.. 返回根目录: cd / 创建一个隐藏文件: vim .test 显示隐藏文件: l ...
- Linux 入门记录:十六、Linux 多命令协作:管道及重定向
一.多命令协作 在 Linux 系统当中,大多数命令都很简单,很少出现复杂功能的命令,每个命令往往只实现一个或多个很简单的功能.通过将不同功能的命令组合一起使用,可以实现某个复杂功能的. Linux ...
- [Linux]常用命令、组合命令以及输入输出重定向
[Linux]常用命令.组合命令以及输入输出重定向 2020-03-10阅读 1580 原创文章 文章目录 0.切换目录 1.复制文件和目录`cp` 1.1.复制文件 1.2.复制目录 1.3.扩 ...
- Linux 常用命令小结
学习脚本几天了,总结下linux debian下脚本常用命令. Linux 1.添加删除账户 useradd / userdel 2.修改"张三"密码 passwd 张 ...
- linux全部命令
linux全部命令 一.安装和登陆命令1.进入图形界面startx 2.进入图形界面init 5 3.进入字符界面init 3 4.登陆login 5.关机poweroff-p 关闭机器的时候关闭电源 ...
- linux sed命令参数及用法详解
linux sed命令参数及用法详解 http://blog.csdn.net/namecyf/article/details/7336308 1. Sed简介 sed 是一种在线编辑器,它一次处理一 ...
- Linux Bash命令关于程序调试详解
转载:http://os.51cto.com/art/201006/207230.htm 参考:<Linux shell 脚本攻略>Page22-23 Linux bash程序在程序员的使 ...
随机推荐
- RabbitMQ 和 Kafka 的消息可靠性对比
RabbitMQ和Kafka都提供持久的消息保证.两者都提供至少一次和至多一次的保证,另外,Kafka在某些限定情况下可以提供精确的一次(exactly-once)保证. 让我们首先理解一下上述术语的 ...
- 带下划线的 HTTP Header无法获取到可能是因为nginx
背景:新版本修改了个功能是在老版本的基础上做的,同一个接口,需要兼容老版本,因此让前台在header中封装了 version版本号,client_type 客户端类型,根据这两个字段判断接口要走的逻辑 ...
- hive 调优(二)参数调优汇总
在hive调优(一) 中说了一些常见的调优,但是觉得参数涉及不多,补充如下 1.设置合理solt数 mapred.tasktracker.map.tasks.maximum 每个tasktracker ...
- 字符串匹配(KMP&BF)
字符串匹配 题目描述 设计一个程序,从一个主字符串中查找一个子字符串在主串中第一次出现的位置.主串和子串的长度不超过100.如果找不到,则输出-1. 程序输入说明 第一行输入一个整数N,说明需要进 ...
- Leetcode题目300.最长上升子序列(动态规划-中等)
题目描述: 给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度 ...
- git常用操作方法
在实际开发,测试中,会使用git作为版本控制工具来完成团队协作.因此,对基本的git操作指令进行总结是十分有必要的,本文对一些术语或者理论基础,不重新码字,可以参考廖雪峰老师的博文,本文只对命令做归纳 ...
- Flutter移动电商实战 --(29)列表页_商品列表数据模型建立
简历数据模型 json生成dart类的网站: https://javiercbk.github.io/json_to_dart/ json数据 {"code":"0&qu ...
- mongodb的安装及使用
1.MongoDB安装 安装包下载地址: https://www.mongodb.com/download-center/community 启动数据库:进入到mongd所在的bin目录,执行mong ...
- SQL-W3School-高级:SQL AUTO INCREMENT 字段
ylbtech-SQL-W3School-高级:SQL AUTO INCREMENT 字段 1.返回顶部 1. Auto-increment 会在新记录插入表中时生成一个唯一的数字. AUTO INC ...
- linux服务端导入oracle数据库.sql脚本
一般情况下,后缀名为.sql或者为记事本类型的文本脚本可以通过打开后复制或者直接在客户端打开执行,但如果脚本比较大时(比如文件达到几百M以上), 普通文本工具和数据库客户端都无法打开,哪怕可以打开,也 ...