shell学习第二天 入门-命令行与参数

一、基本的I/O重定向

标准的输入/输出可能是软件设计原则最重要的概念了,这个概念就是:程序应该有数据的来预案段,数据的目的端(数据要去的地方)以及报告问题的地方,它们分别被称为标准输入(input)、标准输出(output)已经标准错误输出(error)。I/O重定向就是通过与终端交互,或是在shell脚本里设置,重新安排从哪里输入或输出到哪里;我个人理解同python的重定向一样,数值转换字符、字符转换数值;

二、重定向与管道

1、以<改变标准输入

program < file 可将program的标准输入修改为file

tr -d '\r' < 1.txt...

2、以 > 改变标准输出

program > file 可将program的标准输出修改为file

tr -d '\r' < doc-file.txt > UNIX-file.txt 这条命令会先以tr将doc-file.txt里的ASCLL carriage-return(回车)删除,在将转换完成的数据输出到UNIX-file.txt。doc-file.txt里的原始数据不会有变化

> 重定向符在目的文件不存在时会新建一个,如果目的文件存在会覆盖掉,原本的数据会丢失。

3、以 >>附加到文件

program >> file 可将program的标准输出附加到file的结尾处,如同> ,如果目的文件不存在,>>重定向符会新建一个,如果目的文件存在,它不会覆盖掉文件,而是将程序产生的数据附加到文件结尾处;

4、以 | 建立管道

program1 | porgam2  可将1的标准输出修改为2的标准输入。

不同于<和>可将输入与输出连接到文件,管道可以把两个以上执行中的程序衔接在一起,第一个程序的标准输出可以变成第二个程序的标准输入,这么做的好处就是管道可以使得执行速度比使用临时文件的程序快上10倍;

tr -d '\r' < dos-file.txt | sort > unix-file.txt

这条管道的会先删除输入文件内的回车字符,在完成数据的排序之后,将结果输出到目的文件。

5、tr的语法介绍

tr [optinos] source-char-list replace-char-list

用途:转换字符、例如将大写字符转换成小写。或者可以删除指定的字符、再或者将一串重复出现的字符浓缩成一个

常用选项:-c 取source-char-list的反义,tr要转换的字符,变成未列在source-char-list中的字符,此选项通常与-d或-s配合使用

-C 与-c相似,但所处理的是字符,而非二进制的字节值

-d 删除source-char-list里所列的字符,而不是转换他们

-s 浓缩重复的字符。如果标准输入中连续出现source-char-list里所列的字符,则将其浓缩车一个;

三、特殊文件:/dev/null与/dev/tty

1、/dev/null。传送到此文件的数据都会被系统丢掉。也就是说,当程序将数据写到此问件事,会认为它已成功完成写入数据的操作,但实际上什么事情都没做、如果你需要的是命令的推出状态,而非它的输出,此功能会很有用,例如,测试一个文件是否包含某个模式:

if grep pattern myfile > /dev/null

then

    ... 找到模式时

else

    ... 找不到模式时

fi

相对的,读取/dev/null 则会立即返回文件结束符号(end-of-file)。读取/dev/null的操作会很少出现在shell程序里,不过了解这个文件的行为模式还是非常重要的。

2、/de/tty

当程序打开此文件时、unix会自动将它重定向到一个重点(一个实体的控制台或穿行端口,也可以使一个通过网络与窗口登录的未中断)再与程序结合、这在程序必须读取人工输入时(例如密码)特别有用;也可以用来产生错误信息;

printf “Enter new password:”提示输入

stty -echo                                  关闭自动打印输入的字符功能

read pass < /dev/tty                   读取密码

printf “Enter again:”              提示再次输入

read pass2 </dev/tty                   再次读取密码

stty echo                                     打开自动打印输入的字符功能






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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值