神奇的shell命令行输入与输出功能介绍
标准输入/输出和重定向,Linux发行版Fedora Core Linux,而Red Hat公司原来Red Hat Linux的开发团队也将继续参与这一发行版本的开发工作。
标准输入与输出
我们知道,执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。
我们以cat命令为例,cat命令的功能是从shell命令行给出的文件中读取数据,并将这些数据直接送到标准输出。若使用如下命令:
$ cat config 将会把文件config的内容依次显示到屏幕上。但是,如果cat的shell命令行中没有参数,它就会从标准输入中读取数据,并将其送到标准输出。例如:
$ cat
Hello world
Hello world
Bye
Bye
用户输入的每一行都立刻被cat命令输出到屏幕上。另一个例子,命令sort按行读入文件正文(当shell命令行中没有给出文件名时,表示从标准输入读入),将其排序,并将结果送到标准输出。下面的例子是从标准输入读入一个采购单,并将其排序。
$ sort
bananas
carrots
apples
bananas
carrots
这时我们在屏幕上得到了已排序的采购单。直接使用标准输入/输出文件存在以下问题:输入数据从终端输入时,用户费了半天劲输入的数据只能用一次。下次再想用这些数据时就得重新输入。而且在终端上输入时,若输入有误修改起来不是很方便。输出到终端屏幕上的信息只能看不能动。我们无法对此输出作更多处理,如将输出作为另一命令的输入进行进一步的处理等。为了解决上述问题,Linux系统为输入、输出的传送引入了另外两种机制,即输入/输出重定向和管道。
输入重定向
输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。所以说,输入重定向主要用于改变一个命令的输入源,特别是改变那些需要大量输入的输入源。例如,命令wc统计指定文件包含的行数、单词数和字符数。如果仅在shell命令行上键入:
$wc
wc将等待用户告诉它统计什么,这时shell就好象死了一样,从键盘键入的所有文本都出现在屏幕上,但并没有什么结果,直至按下<ctrl+d>,wc才将命令结果写在屏幕上。如果给出一个文件名作为wc命令的参数,如下例所示,wc将返回该文件所包含的行数、单词数和字符数。
$ wc /etc/passwd
20 23 726 /etc/passwd 另一种把/etc/passwd文件内容传给wc命令的方法是重定向wc的输入。输入重定向的一般形式为:命令<文件名。可以用下面的命令把wc命令的输入重定向为/etc/passwd文件:
$ wc < /etc/passwd
20 23 726
另一种输入重定向称为here文档,它告诉shell当前命令的标准输入来自shell命令行。here文档的重定向操作符使用<<。它将一对分隔符(本例中用delim表示)之间的正文重定向输入给命令。下例将一对分隔符delim之间的正文作为wc命令的输入,统计出正文的行数、单词数和字符数。
$ wc<>this text forms the content
>of the here document,which
>continues until the end of
>text delimter
>delim
在<<操作符后面,任何字符都可以作为正文开始前的分隔符,本例中使用delim作为分隔符。here文档的正文一直延续到遇见另一个分隔符为止。第二个分隔符应出现在新行的开头。这时here文档的正文(不包括开始和结束的分隔符)将重新定向送给命令wc作为它的标准输入。
以上对shell命令行的使用。
相关推荐
-
linux c程序中获取shell脚本输出的实现方法
1. 前言Unix界有一句名言:"一行shell脚本胜过万行C程序",虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作.比如实现一个ping程序来测试网络的连通性,实现ping函数需要写上200~300行代码,为什么不能直接调用系统的ping命令呢?通常在程序中通过 system函数来调用shell命令.但是,system函数仅返回命令是否执行成功,而我们可能需要获得shell命令在控制台上输出的结果.例如,执行外部命令ping后,如果执行失败,我们希望得到p
-
远程linux xshell下输出中文乱码解决方法
使用xshell登录中文版CentOS或者redhat时,在xshell下如果输出的是中文的话可能会显示乱码,通过如下办法可以有效的解决乱码问题 linux中文乱码解决方法如下: 复制代码 代码如下: [root@localhost ~]# cd /etc/sysconfig/ [root@localhost sysconfig]# cp i18n i18n.bak #备份i18n文件 [root@localhost sysconfig]# echo "" >i18n [root
-
shell脚本echo输出不换行功能增强实例
这是第8/101个脚本 There are as many ways to solve this quirky echo problem as there are pages in this book. One of my favorites is very succinct: function echon { echo "$*" | awk '{ printf "%s" $0 }' } You may prefer to avoid the overhead in
-
linux shell的输出效果修改方法(界面颜色)
文本终端的颜色可以使用"ANSI非常规字符序列"来生成.举例: echo -e "\033[44;37;5m ME \033[0m COOL" 以上命令设置背景成为蓝色,前景白色,闪烁光标,输出字符"ME",然后重新设置屏幕到缺省设置,输出字符 "COOL"."e"是命令 echo 的一个可选项,它用于激活特殊字符的解析器."\033"引导非常规字符序列."m"意味着
-
用shell命令读取与输出数据的代码
shell脚本读取数据有以下几种方式:1.键盘输入,默认2.从文件中读取3.通过管道命令传递 echo的功能:\c :不换行\f :进纸\t :跳格\n :换行\表示转义,例如:"\"/dev/rmt0"\"翻译为,"/dev/rmt0" read:从键盘或文件的某一行文本中读取信息,并将其赋给一个变量. 复制代码 代码如下: [jb51]/>read namehello i am a regular user[jb51]/>echo
-
Shell脚本对文件中的行、单词、字符进行迭代输出示例
在进行文本文件进行处理时,对文件件中的行.单词.字符进行迭代和遍历是非常常用的操作.而将一个简单的循环用于迭代,再加上来自stdin或文件的重定向,这就是对文件中的行.单词.和字符进行迭代的基本方法. 废话不多说,马上来看看怎么样实现吧. 1.迭代文中的每一行 使用while循环从标准输入中读取,因为要在标准输入中读取,就要对文件进行重定向,使它重定向到stdin中,代码如下: 复制代码 代码如下: while read line; do echo $line; done < file.t
-
一个简单的转换输出的shell脚本代码
一个简单的转换输出的shell脚本,从健盘输入 a,b,c 这种格式 输出如下格式:a c 复制代码 代码如下: #!/bin/bashread -p '请输入:'echo $REPLY >.tmp5count=`grep -o ',' .tmp5 |wc -l`echo $countcount_=$((count+1))i=1:>.tmp1while [ $i -le $count_ ]do echo $i awk -F, -v j="$i" '{print$
-
shell学习之printf命令格式化输出语句
简介 printf 命令用于格式化输出, 是echo命令的增强版.它是C语言printf()库函数的一个有限的变形,并且在语法上有些不同. 注意:printf 由 POSIX 标准所定义,移植性要比 echo 好. 如同 echo 命令,printf 命令也可以输出简单的字符串: $printf "Hello, Shell\n" Hello, Shell $ printf 不像 echo 那样会自动换行,必须显式添加换行符(\n). printf 命令的语法: printf form
-
关于shell命令的定向输出 2>&1
mycommand >mylog.txt 2>&1 应该是最经典的用法了. 命令的结果可以通过"%>"的形式来定向输出,%表示文件描述符:1为标准输出stdout.2为标准错误stderr.系统默认%值是1,也就是"1>",而1>可以简写为>,也就是默认为>.stdout的默认目标是终端,stderr的默认目标为也是终端.我们在批处理中执行: echo text >result.txt ,我们就可以在屏幕上会看
-
神奇的shell命令行输入与输出功能介绍
标准输入/输出和重定向,Linux发行版Fedora Core Linux,而Red Hat公司原来Red Hat Linux的开发团队也将继续参与这一发行版本的开发工作. 标准输入与输出 我们知道,执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘:标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕.进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中.
-
Android shell命令行中过滤adb logcat输出的方法
我们在Android开发中总能看到程序的log日志内容充满了屏幕,而真正对开发者有意义的信息被淹没在洪流之中,让开发者无所适从,严重影响开发效率.本文就具体介绍几种在shell命令行中过滤adb logcat输出的方法. 1.只显示需要的输出(白名单) 最方便的当然是通过管道使用 grep 过滤了,这样可以使用 grep 强大的正则表达式匹配.简单的匹配一行当中的某个字符串,例如 MyApp: adb logcat | grep MyApp adb logcat |
-
Android shell命令行中过滤adb logcat输出的几种方法
我们在Android开发中总能看到程序的log日志内容充满了屏幕,而真正对开发者有意义的信息被淹没在洪流之中,让开发者无所适从,严重影响开发效率.本文就具体介绍几种在shell命令行中过滤adb logcat输出的方法. 1.只显示需要的输出(白名单) 最方便的当然是通过管道使用 grep 过滤了,这样可以使用 grep 强大的正则表达式匹配.简单的匹配一行当中的某个字符串,例如 MyApp: adb logcat | grep MyApp adb logcat | grep -i
-
shell 命令行中操作HBase数据库实例详解
shell 命令行中操作HBase数据库 Shell控制 进入到shell命令行界面,执行hbase命令,并附加shell关键字: [grid@hdnode3 ~]$ hbase shell HBase Shell; enter ¨help¨ for list of supported commands. Type "exit" to leave the HBase Shell Version 0.90.5, r1212209, Fri Dec 9 05:40:36 UTC 2011
-
详解Shell 命令行批量处理图片文件名的实例
Shell 命令行批量处理图片文件名 前言: 从网上下载了一堆图片,有的是*.jpg的,有的是*.jpeg的.并且文件名有长有短,很是糟心.因此,我想把这些文件给全部整理好,当然是用shell来处理啦! 说干就干. 循环所有文件 首先,我把所有的乱七八糟的图片,全部放在 ./image/ 这个文件夹下面. 然后在外层写一个i.sh的shell文件,录入下面的内容. 我的文件结构演示如下: 文件 image/xxx.jpg image/xxx.jpeg i.sh for f in $(find .
-
shell命令行,一键创建 python 模板文件脚本方法
写 python 文件时,每个文件开头都必须注明版本和编码.每次我 touch 文件之后粘贴这两句话让我不胜其烦. 由于我没有安装 python 的 IDE 工具,也没有为 vim 安装相应的插件.主要是为了练习自己的编码能力,而不希望过于依赖工具,所以为了解决这个问题,我写了这个脚本. #!/bin/bash if [ -n "$1" ]; then if [ -f "$1" ]; then echo $1 '文件已经存在,不能重复创建' else echo '#
-
python获得命令行输入的参数的两种方式
外部直接执行python文件时,我们有时需要获得命令行的参数 获得命令行参数的两种方式 1.通过sys.argv sys.argv:获得一个参数列表,第一个值为文件名本身,通过sys.argv[1]获得第文件名后的第一个参数 ,多个参数使用空格隔开 测试代码: import sys print(sys.argv) print(len(sys.argv)) print(len(sys.argv[1])) 测试数据: python3 test.py 第一个参数 第二个参数 执行结果: ['test.
-
python获取从命令行输入数字的方法
本文实例讲述了python获取从命令行输入数字的方法.分享给大家供大家参考.具体如下: #---------------------------------------- # Name: numerical_input.py # Author: Kevin Harris # Last Modified: 02/13/04 # Description: This Python script demonstrates # how to get numerical input # from the c
-
python采用getopt解析命令行输入参数实例
本文实例讲述了python采用getopt解析命令行输入参数的方法,分享给大家供大家参考. 具体实例代码如下: import getopt import sys config = { "input":"", "output":".", } #getopt三个选项,第一个一般为sys.argv[1:],第二个参数为短参数,如果参数后面必须跟值,须加:,第三个参数为长参数 #是一个列表, opts, args = getopt.g
-
python shell命令行中import多层目录下的模块操作
首先在文件夹中添加_init_.py文件,即使是空文件也可以,多层文件夹,每层文件夹中都要添加. 比如我要import,a文件夹中,b文件夹下的 c.py 我就需要在a,b文件夹中都添加_init_.py文件. 然后引入方式:import a.b.c 然后在调用c.py的函数时,直接c.f()是不行的,需要a.b.c.f(). 当然也可以先写 c = a.b.c,然后再c.f(). 补充知识:Python IDLE shell中引入模块 安装了Python之后,会自带一个Python IDLE,
随机推荐
- ASP新手必备的基础知识
- vue实现长图垂直居上 vue实现短图垂直居中
- JavaScript组合拼接字符串的效率对比测试
- 使用MySQL语句来查询Apache服务器日志的方法
- python命令行参数解析OptionParser类用法实例
- javascript实现的固定位置悬浮窗口实例
- asp.net实现获取客户端详细信息
- asp.net web大文件上传带进度条实例代码
- PHP入门教程之上传文件实例详解
- javascript 新闻标题静态分页代码 (无刷新)
- 全面解析Java8观察者模式
- Python中的os.path路径模块中的操作方法总结
- 一款双向无缝+按钮定位的焦点图实现代码
- Node.js利用debug模块打印出调试日志的方法
- Win2008服务器或VPS安全配置基础教程
- Linux的常用网络命令
- 浅析Laravel5中队列的配置及使用
- C#利用性能计数器监控网络状态
- VC程序设计小技巧20例
- vue-router 手势滑动触发返回功能