linux替换bash,bash脚本_输入输出和管道、替换

以cat为例,功能是从文件读数据,送到stdout。

# cat tmp

back-loop.sh

cgiselect

要是没有文件作为命令的参数,那么就要从stdin输入,实际上就是将界面输入的字符串都打印出来。

# cat

hello

hello

world

world

用户每输入一行都会打印出来,Ctrl+d表示终止输入。

再感受一个例子。

# sort

a

c

b

输入结束:Ctrl+d

a

b

c

2、输入重定向

command-line [n]

将然有,命令默认从键盘获得的输入,改成从文件,或者其它打开文件以及设备输入。执行这个命令,将标准输入0,与文件或设备绑定。将由它进行输入。

详细出处参考:http://www.jb51.net/LINUXjishu/32566.html

[chengmo@centos5 shell]# cat > catfile

testing

cat file test

#这里按下 [ctrl]+d 离开

#从标准输入【键盘】获得数据,然后输出给catfile文件

[chengmo@centos5 shell]$ cat>catfile

#cat 从test.sh 获得输入数据,然后输出给文件catfile

[chengmo@centos5 shell]$ cat>catfile

<

test a file

test!

eof

#<<

这个连续两个小符号,他代表的是『结束的输入字符』的意思。这样当空行输入eof字符,输入自动结束,不用ctrl+D

再看一例:

$ wc /etc/passwd

20 23 726 /etc/passwd

$ wc < /etc/passwd

20 23 726

3、输出重定向

command-line1 [1-n] > file或文件操作符或设备

上面命令意思是:将一条命令执行结果(标准输出,或者错误输出,本来都要打印到屏幕上面的)重定向其它输出设备(文件,打开文件操作符,或打印机等等)1,2分别是标准输出,错误输出。

[chengmo@centos5 shell]$ ls test.sh test1.sh  #不重定向,结果直接输出到屏幕

ls: test1.sh: 没有这个文件和目录

test.sh

[chengmo@centos5 shell]$ ls test.sh test1.sh

1>suc.txt  #将stdout写入suc.txt,1可以省略,直接>suc.txt,默认是1.

ls: test1.sh: 没有这个文件和目录

[chengmo@centos5 shell]$ cat suc.txt

test.sh

[chengmo@centos5 shell]$ ls test.sh test1.sh

1>suc.txt 2>err.txt

#将stdout写入suc.txt,stderr写入err.txt

[chengmo@centos5 shell]$ cat suc.txt err.txt

test.sh

ls: test1.sh: 没有这个文件和目录

[chengmo@centos5 shell]$ ls test.sh test1.sh

1>>suc.txt

2>>err.txt  #>>是追加,不是从开头写入

[chengmo@centos5 shell]$ ls test.sh test1.sh

2>&-  #关闭stderr

test.sh

[chengmo@centos5 shell]$ ls test.sh test1.sh

2>/dev/null  #写入空设备,相当于关闭

test.sh

#&[n] 代表是已经存在的文件描述符,&1 代表输出

&2代表错误输出 &-代表关闭与它绑定的描述符

#/dev/null 这个设备,是linux 中黑洞设备,什么信息只要输出给这个设备,都会给吃掉。你也可以cat /dev/null

>tmp表示清空tmp文件。

[chengmo@centos5 shell]$ ls test.sh test1.sh

>/dev/null 2>&1

#将错误输出2

绑定给正确输出 1,然后将 正确输出 发送给 /dev/null设备 这种常用

[chengmo@centos5 shell]$ ls test.sh test1.sh

&>/dev/null  #&

代表标准输出,错误输出将所有标准输出与错误输出 输入到/dev/null文件

注意:

1、shell遇到”>”操作符,会判断右边文件是否存在,如果存在就先删除,并且创建新文件。不存在直接创建。无论左边命令执行是否成功。右边文件都会变为空。

2、“>>”操作符,判断右边文件,如果不存在,先创建。以添加方式打开文件,会分配一个文件描述符[不特别指定,默认为1,2]然后,与左边的标准输出(1)或错误输出(2)绑定。

3、当命令:执行完,绑定文件的描述符也自动失效。0,1,2又会空闲。

4、一条命令启动,命令的输入,正确输出,错误输出,默认分别绑定0,1,2文件描述符。

5、一条命令在执行前,先会检查输出是否正确,如果输出设备错误,将不会进行命令执行

4、管道

管道用于将一个程序的输出作为另一个程序的输入。管道特别适用将多个命令连接起来。

比如:

# ls . | wc -w  ------------------统计本地文件夹的文件个数

9

# cat tmp | grep sh | wc -l  -------------------打开文件tmp,查找单词sh,统计文件中有"sh"的行的数量

3

5、替换

命令替换是将一个命令行的输出作为另一个命令的参数。

command1 `command2`

其中,command2的输出将作为command1的参数。需要注意的是这里的`符号,被它括起来的内容将作为命令执行,执行后的结果作为command1的参数。

$ cd `pwd`

该命令将pwd命令列出的目录作为cd命令的参数,结果仍然是停留在当前目录下,等同于pwd |

cd。但是如果一个命令不止一个参数,那么用替换有时就比较方便了。

6、减号 -

当一些指令需要使用文件名称操作时(比如tar),可以用减号-来表示stdin或者stdout。注意不要与cd -混淆了,cd

-表示回到上一个目录。

比如: tar cvf - /source/directory | (cd

/dest/directory && tar xvf - )

-------------------------可以实现快速的拷贝文件目录

7、xargs

xargs是个很好用的工具,可以将stdin分割为参数,赋给要调用的指令。注意,xargs是以空格或者断行字符来分割stdin的,所以如果你的输入中有空格,可能会有问题,需要做一些处理。

xargs有两个非常大的用处:

(1)对于那些不支持管道的命令(比如ls,echo),但又需要配合管道操作时,只能用xargs来调用;

(2)xargs可以对入参进行处理,很方便的传给命令。

举例说明:

# find /sbin -perm /7000 |ls -l  #只显示本地目录,因为ls不支持管道

# find /sbin -perm /7000 |xargs ls -l  #可以实现目的,查看/sbin中特殊权限文档的详细信息

# cut -d':' -f1 /etc/passwd |head -n 3  #取出文件中第一栏,并且只取前三行

root

bin

daemon

# cut -d':' -f1 /etc/passwd |head -n 3 | finger  #只显示当前用户的信息

# cut -d':' -f1 /etc/passwd |head -n 3 | xargs finger

#显示取出的用户的信息

# cut -d':' -f1 /etc/passwd |head -n 3 | xargs -p finger

#-p参数会询问是否继续操作

finger root bin daemon ?...y

# cut -d':' -f1 /etc/passwd |head -n 3 | xargs -p -n 1 finger

#-n参数限制参数数量,将参数分为多个部分,每次最多输入n个

# cut -d':' -f1 /etc/passwd |head -n 3 | xargs -e'bin' finger

#-e参数,eof,当遇到指定字符串时终止入参输入

# find . -type f -print0 | sed 's/\.rpm//g ; s/\.\///g' |

xargs -0 rpm -e

#man find和xargs可以看到类似这个命令的例子,find

-print0打印文件名并在文件名后加一个空字符(非断行),而xargs -0则以空字符来分割参数。这两个命令是很般配的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值