shell初级-----数据呈现方式
输入与输出
Linux系统将每个对象当作文件处理,这包括输入和输出进程。
Linux用文件描述符来标识每个文件对象。
文件描述符是一个非负整数,可以唯一标识会话中打开的文件。
每个进程一次多可以有九个文件描述符。出于特殊目的,bash shell保留了前三个文件描述符(0、1和2)

这三个特殊文件描述符会处理脚本的输入和输出。
1、stdin
STDIN文件描述符代表shell的标准输入
在使用输入重定向符号(<)时,Linux会用重定向指定的文件来替换标准输入文件描述符。 它会读取文件并提取数据,就如同它是键盘上键入的。
[root@node1 ljy]# cat < one.txt
one
two
three
2、stdout
STDOUT文件描述符代表shell的标准输出
[root@node1 ljy]# date > time.txt
[root@node1 ljy]# more time.txt
2019年 05月 16日 星期四 10:08:51 CST
[root@node1 ljy]# date >> time.txt #>>表示追加的意思
[root@node1 ljy]# more time.txt
2019年 05月 16日 星期四 10:08:51 CST
2019年 05月 16日 星期四 10:09:01 CST
3、stderr
shell通过特殊的STDERR文件描述符来处理错误消息。
默认情况下,错误消息也会输出到显示器输出中。
[root@node1 ljy]# aaaa 2> err.txt
[root@node1 ljy]# more err.txt
-bash: aaaa: 未找到命令 #shell会只定向错误消息而非普通的数据。
如果想要同时定义普通与错误的消息可以用两个重定向符的方式:
[root@node1 ljy]# ls -al one two 2> err.txt 1> normal.txt
[root@node1 ljy]# more err.txt
ls: 无法访问two: 没有那个文件或目录
[root@node1 ljy]# more normal.txt
-rw-r--r-- 1 root root 0 5月 16 10:17 one
bash也提供了特殊的重定向符实现这一个效果&>。
[root@node1 ljy]# ls -al one two &> ceshi.txt
[root@node1 ljy]# more ceshi.txt
ls: 无法访问two: 没有那个文件或目录
-rw-r--r-- 1 root root 0 5月 16 10:17 one
#生成的所有输出都会到同一位置,包括普通与错误。默认错误消息会处于更高的优先级,方便查看。
脚本中重定向输出
1、临时重定向
希望在脚本中生成错误的信息的话,可以单独的一行输出重定向到STDERR。重定向到文件描述时,你必须在文件描述符数字前加一个&符号。
[root@node1 ljy]# more one.sh
#!/bin/bash
echo "this is a error message!" >&2
echo "this is a normal message!"
[root@node1 ljy]# sh one.sh
this is a error message!
this is a normal message!
[root@node1 ljy]# sh one.sh 2> err.log
this is a normal message!
[root@node1 ljy]# more err.log
this is a error message!
默认情况下,Linux会将STDERR导向STDOUT,但是运行脚本时重定向了STDERR,脚本中所有导向STDERR的都会被重新导向。
2、永久重定向
如果脚本中有大量数据需要重定向,可以使用exec命令告诉shell在脚本执行期间重定向某个特定文件描述符。
[root@node1 ljy]# more one.sh
#!/bin/bash
exec 1> normal.txt
exec 2> err.txt
echo "this is a error message!" >&2
echo "this is a normal message!"
[root@node1 ljy]#
[root@node1 ljy]# sh one.sh
[root@node1 ljy]# ls
err.txt normal.txt one.sh
[root@node1 ljy]# more err.txt
this is a error message!
[root@node1 ljy]# more normal.txt
this is a normal message!
脚本中重定向输入
exec命令允许你将STDIN重定向到linux文件中
[root@node1 ljy]# more test
one
two
three
[root@node1 ljy]# more ceshi.sh
#!/bin/bash
exec 0< test
count=1
while read line
do
echo "$count:$line"
count=$[$count + 1]
done
[root@node1 ljy]# sh ceshi.sh
1:one
2:two
3:three
阻止命令输出
shell输出到null文件的任何命令都不会被保存!
在Linux系统中null的标准位置是/dev/null,你重定向到该位置的文件都会被丢掉不会显示。
[root@node1 ljy]# ls -al > /dev/null
[root@node1 ljy]# more /dev/null
也可以将/dev/null作为输入文件,可以用它来快速清空现有文件的数据,而不需要删除后重新创建。
[root@node1 ljy]# more test
one
two
three
[root@node1 ljy]# cat /dev/null > test
[root@node1 ljy]# more test
创建临时文件
系统上的任何账户都有权限读写/tmp目录中的文件
mktemp可以在本地目录中创建一个临时文件,需要制定一个文件名,末尾需要设置6个X
[ljy@node1 tmp]$ mktemp ceshi.XXXXXX
ceshi.vyBZEx
-t选项会强制mktemp命令在系统的临时目录创建文件。
由于mktemp命令返回来了全路径名,你可以在Linux系统的任何目录下引用该临时文件,不需要管目录在哪。
[ljy@node1 /]$ mktemp -t ceshi.XXXXXX
/tmp/ceshi.eSU3MD
-d选项告诉mktemp命令来创建一个临时目录而不是一个文件。
[ljy@node1 tmp]$ mktemp -d ceshi.XXXXXX
ceshi.9JVceD
记录消息
tee命令相当于管道的一个T型接头。他将从STDIN过来的数据同时发往两处,一处是STDOUT,另一处是tee命令行所指定的文件名。
[root@node1 ljy]# date | tee ceshi
2019年 05月 16日 星期四 13:57:40 CST
[root@node1 ljy]# more ceshi
2019年 05月 16日 星期四 13:57:40 CST
tee命令会在每次使用时覆盖输出内容,如果你想要追加,必须使用-a参数。
shell初级-----数据呈现方式的更多相关文章
- 了解大数据的特点、来源与数据呈现方式以及用Python写Mad Libs游戏
作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2620. 1.浏览2019春节各种大数据分析报告,例如: 这世间,再 ...
- iOS开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】
在上文,我们介绍了ios开发中的其中2种数据持久化方式:属性列表.归档解档.本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运 ...
- 四种数据持久化方式(下) :SQLite3 和 Core Data
在上文,我们介绍了iOS开发中的其中2种数据持久化方式:属性列表.归档解档. 本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运用: 在本节,将通过对4个文 ...
- android的数据存储方式
数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 ...
- Android的数据存储方式(转)
数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 ...
- Android编程中的5种数据存储方式
Android编程中的5种数据存储方式 作者:牛奶.不加糖 字体:[增加 减小] 类型:转载 时间:2015-12-03我要评论 这篇文章主要介绍了Android编程中的5种数据存储方式,结合实例形式 ...
- (3)分布式下的爬虫Scrapy应该如何做-递归爬取方式,数据输出方式以及数据库链接
放假这段时间好好的思考了一下关于Scrapy的一些常用操作,主要解决了三个问题: 1.如何连续爬取 2.数据输出方式 3.数据库链接 一,如何连续爬取: 思考:要达到连续爬取,逻辑上无非从以下的方向着 ...
- 技术实操丨HBase 2.X版本的元数据修复及一种数据迁移方式
摘要:分享一个HBase集群恢复的方法. 背景 在HBase 1.x中,经常会遇到元数据不一致的情况,这个时候使用HBCK的命令,可以快速修复元数据,让集群恢复正常. 另外HBase数据迁移时,大家经 ...
- 大数据学习day26----hive01----1hive的简介 2 hive的安装(hive的两种连接方式,后台启动,标准输出,错误输出)3. 数据库的基本操作 4. 建表(内部表和外部表的创建以及应用场景,数据导入,学生、分数sql练习)5.分区表 6加载数据的方式
1. hive的简介(具体见文档) Hive是分析处理结构化数据的工具 本质:将hive sql转化成MapReduce程序或者spark程序 Hive处理的数据一般存储在HDFS上,其分析数据底 ...
随机推荐
- BUPT复试专题—数据库检索(2014软院)
题目描述 在数据库的操作过程中,我们进场会遇到检索操作.这个题目的任务是完成一些特定格式的检索,并输出符合条件的数据库中的所有结果. 我们现在有一个数据库,维护了学生的姓名(Name),性别(Sex) ...
- HDOJ 1217 Arbitrage(拟最短路,floyd算法)
Arbitrage Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- 8. Smarty3:模版中的内置函数
smarty3中对内置函数的修改比較大,加入了很多新的功能:变量声明.表达式,流程控制,函数.数组等.可是建议不要在模版中去使用过于复杂的逻辑,而是要尽量将一些程序设计逻辑写到PHP中,并在模版中採用 ...
- Java学习之集合
1.ArrayList:采用数组的形式保存对象,这种方式将对象保存在连续的位置中,所以查询效率比较高,但是插入删除时麻烦,并且ArrayList不是线程安全的. 2.Vector:保存对象的方式与Ar ...
- HTML初体验
ios讨论群1群:135718460 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,它规定了自己的语法规则,用来表示比"文本"更丰富 ...
- iOS 小动画
一.图片旋转 CABasicAnimation* rotationAnimation; rotationAnimation = [CABasicAnimation animationWithKeyPa ...
- python day 13 生成器 以及 推导式
1.生成器的本质是迭代器 2.生成器函数 def fn() 函数体 yield fn() g = fn() 此时这个g就是生成器 所以g 是可迭代的 g._ _next_ _ 每执行一次_ _nex ...
- bind_ip
https://docs.mongodb.com/manual/reference/configuration-options/index.html 192.168.2.* --23T10:: I C ...
- 在Android Studio中移除导入的模块依赖
进入settings.gradle(Project Settings) include ':app', ':pull_down_list_view' 要移除的Module dependency为“pu ...
- EventStore文件存储设计
背景 ENode是一个CQRS+Event Sourcing架构的开发框架,Event Sourcing需要持久化事件,事件可以持久化在DB,但是DB由于面向的是CRUD场景,是针对数据会不断修改或删 ...