最新要闻
- 男主角是明星的小说有哪些?男主角是明星的小说推荐
- 科比最后一场比赛是什么时候?科比最后一场比赛是多少分?
- 鞋子防臭的小妙招有哪些?鞋子防臭喷雾哪个牌子好?
- 沙棘如何鉴别好坏?沙棘的功效作用与主治是什么?
- 玉碎了代表什么征兆?玉碎了有什么办法修复吗?
- 今日热议:4999元 小米13限量定制色明天首销:只有5万台
- 环球焦点!中国民营火箭朱雀二号发射失利 全球首型轨道飞行的甲烷火箭
- 当前播报:QQ邮箱推实用新功能:英文文档一键即可翻译
- 【报资讯】丰田凯美瑞看呆!新一代本田雅阁实车曝光:比思域还运动
- 撞到快报废!特斯拉高速追尾大货车 司机身亡:现场视频速度快到可怕
- 单手就能用的折叠屏旗舰!OPPO Find N2今天发布:比直板机还轻
- 环球视讯!反对无效!日本投放广告宣传福岛核污水安全性:必须排海
- 【环球播资讯】我国成功发射遥感三十六号卫星!长征火箭年发射数首次迈上50大关
- 【环球速看料】适合男女双打 这三款游戏拉近你和她的距离
- 焦点滚动:腾讯互动阅读App《一零零一》宣布将停运:补偿方案出炉
- 环球新动态:显卡不会便宜了?NV要发新RTX 4080、4090:移动版也万元节奏
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
【天天速看料】Shell 标准输入和输出
无论是要交给程序处理的数据,还是控制脚本的简单命令,都少不了输入和输出。程序要做的第一件事就是处理如同一阴一阳的“输入与输出”。
1 、从文件获取输入
当我们希望向文件输出内容时,我们可以通过符号 > 或 >> 实现。而用代表输入重定向的符号 < 可以从文件中读取数据,如下:
(相关资料图)
$ wc < my.file
之所以选择这种形状的操作符号,原因在于它们可以从视觉上提示重定向的方向。
很多 shell 命令可以接受一个或多个文件名作为参数,但如果没有给出文件名,命令就会从标准输入读取。使用这种命令时,可以采用command filename或者 command < filename,这两种形式的结果没什么区别。在这个例子中,wc 是这样,换作 cat 或其他命令,也是如此。
2、将数据与脚本存放在一起
< 可以从文件读取数据,当你需要获得脚本输入,但又不想用单独的文件时,使用 <<(here-document)从命令行而非文件重定向输入文本。如果放在 shell 脚本中,则脚本文件可以同时包含数据与代码。
以下是名为 ext.sh 的 shell 脚本示例:
# 下面是here-documentgrep $1 <
当我们运行此脚本,可以传入一个参数,如下调用:
$ ./ext.sh bill# 输出以下内容bill x.919
grep 命令查找第一个参数是否在指定文件中出现,如果没有指定文件,那么它会在标准输入中查找。通过设置 here document,告诉 shell 将标准输入重定向(临时)到此处。<< 语法表示我们想创建一个临时输入源,EOF 是一个任意的字符串(你想用什么都行),用作临时输入的终止符。它并不属于输入的一部分,只是作为标记告诉输入在哪里结束。
3、避免here-document中的怪异行为
here-document 在使用时可能会出现一些怪异的行为。你想用上一节介绍的方法来保存一份简单的捐赠人列表,因此创建了一个名为donors.sh 的文件,如下所示:
# 简单地查找慷慨的捐赠人grep $1 <
但是运行时出现了奇怪的输出:
$ ./donors.sh billpete bill00bill $ 9$ ./donors.sh petepete pete00
正常情况下(除非使用了转义语法),bash 手册页中是这样说的:“……here-document 的每一行都要执行参数扩展、命令替换以及算术扩展”。因此,最初的 donors 脚本中所发生的事情是捐赠额被当作 shell 变量了。例如,$100 被视为 shell 变量 $1,随后跟着两个 0。这就是为什么我们在搜索“pete”时,得到的是 pete00;搜索“bill”时,得到的是 bill00。
解决办法:
通过转义结尾标记中的任意或所有字符,修改脚本内容,关闭 here-document 内部的 shell 特性(注意观察EOF位置的变化):
# 简单地查找慷慨的捐赠人grep $1 <<"EOF"pete $100joe $200sam $ 25bill $ 9EOF
尽管其中存在非常微妙的区别,但也可以将 < 输入不止从文件中获取,有时我们还需要获取用户输入的内容。此时,我们需要用到read命令,如下: 或者 不带参数的 read 语句会读取用户输入并将其保存在 shell 变量REPLY 中,这是 read 的最简形式。如果希望 bash 在读取用户输入前先输出提示信息,可以使用 -p 选项。-p 之后的单词就是提示信息,如果想提供多个单词,可以将其引用起来。记住,要在提示信息结尾处加上标点符号或空格,因为光标会停在那里等待输入。-t 选项可以设置超时值。指定秒数达到后,不管用户是否输入,read 语句都会返回。我们的示例同时用到了 -t 和 -p 选项,但你也可以单独使用 -t 选项。 上面的方式获取用户输入时会以明文回显,那适用密码输入么? 当我们需要用户输入敏感信息时,需要禁止用户输入内容的回显。此时用 read 命令读取用户输入,需要加上一个特殊选项来关闭回显: -s 选项告诉 read 命令不要回显输入的字符(s 代表 silent),-p 选项指明下一个参数是提示信息,会在读取用户输入之前显示。从用户那里读取到的输入行保存在变量 $PASSWD 中。在 read 之后,我们用 printf 输出了一个换行符。这里的printf 不能少,因为 read -s 会关闭字符回显。如果禁止了回显功能,当用户按下回车键时,就不会回显换行符,后续输出就会和提示信息出现在同一行。输出换行符会将光标带到下一行。 当然,我们也可以选择一行,如下: 如果无法产生输出,那么软件也就没什么价值了,但长久以来,I/O一直是难缠的计算领域之一。问题是有太多类型的输出,向屏幕写入不同于向文件写入,向文件写入也不同于向磁带或闪存写入。所以,对于输出会产生一些问题,如下: 显然,如果把这些事情都交给每个程序员是不合理的,所以这种事情留给shell 就行了。 想要用 shell 命令产生一些简单的输出,使用内建命令 echo。命令行中的所有参数都会打印到屏幕上。 输出: 结果和在 bash 提示符(字符 $)后输入该命令相同: echo 是最简单的 bash 命令之一。该命令可以将参数输出到屏幕上。但是有几点需要记住: shell 对参数间的空白字符没有太多限制,这通常是一种不错的特性。但对于 echo 来说,就有点烦人了。 引号中的单词组成了 echo 命令的单个参数。该参数是一个字符串,shell 不会干涉字符串的内容。实际上可以用单引号("")明确告诉shell 不要干涉字符串。 使用内建命令 printf。例如: 或者: 内建命令 printf 的行为和 C 语言中的同名库函数相似,其中第一个参数是格式控制字符串,之后的参数都根据格式规范(%)进行格式化。 % 和格式类型(本例为 s 或 f)之间的数字提供了额外的格式化细节。 对于浮点类型(f),第一个数字(指示符 4.2 中的 4)是整个字段的宽度。第二个数字(2)是应该在小数点右侧打印出的数位量。注意,结果会按照四舍五入处理。 对于字符串,第一个数字是字段的最大宽度,第二个数字是要输出的字符数量。根据需要,字符串会被截断(长于 max)或用空白填充(不足 min)。如果指示符 max和 min相同,那么就可以确保字符串按照该长度输出。指示符左侧的负号表示字符串向左对齐(在字段宽度内)。如果不使用负号,则字符串向右对齐 希望输出中不包含 echo 默认生成的换行符。使用 printf,做法很简单,去掉格式化字符串末尾的 \n 即可,如下图: 如果是 echo,则使用 -n 选项: 因为 printf 的格式字符串(第一个参数)末尾并没有换行符,所以命令行提示符($)出现在了 printf 的输出之后。该特性在shell 脚本中用处更大,你可能希望在形成一整行前由多条语句逐部分输出,或者在读取输入前显示用户提示。 换作 echo 命令(参见 15.6 节),消除换行符的方法有两种。 首先,-n 选项能够抑制输出行尾的换行符。 另外,echo 命令还可以处理多种具有特殊含义的转义序列(如表示换行符的 \n),这些转移序列与 C 语言字符串中的类似。调用 echo 命令时加上 -e 选项。其中一种转义序列是 \C,它并不会输出什么字符,而是禁止在行尾输出换行符。如下图: 如过想把命令输出保存在文件中,用 > 符号告诉 shell 将输出重定向至文件,例如: 我们来查看一下文件 file.txt 的内容,看看其中是否包含了命令的输出: 示例第一部分的第一行中出现的 echo 命令包含了 3 个要输出的参数。第二行用 > 将这些输出保存到文件 file.txt 中,这就是看不 到 echo 输出的原因。 示例第二部分用 cat 命令显示文件内容。我们可以看出,文件中包含的正是 echo 本该输出的内容。 cat 命令得名自一个较长的单词 concatenation(拼接)。该命令会将出现在命令行上的文件的输出拼接在一起,如果你输入 cat file1 file2 file3,那么这些文件的内容会逐个发送到终端窗口。如果一个大文件被分成了两半,你也可以用 cat 将其恢复原样(也就是将两部分拼接起来),这只需将输出保存到另一个文件中: 如想要用重定向将输出保存到当前目录之外的其他位置,重定向输出时加上路径,如下: 或者: 出现在重定向符号(>)后的文件名其实就是路径名。如果没有任何限定部分,那么文件就会放置在当前目录中。 如果文件名以斜线(/)起始是绝对路径名,此时文件会被放置在文件系统层次结构(目录树)中以根目录起始的指定位置。 第二个例子中,我们使用了相对路径名 ../../over.here,其中的.. 是一个指向父目录的特殊目录,存在于每个目录中。 希望获得程序的输出,但不想输出被出现的错误消息弄乱。要保存的错误消息混杂在程序输出中不容易找出,可将输出和错误消息重定向到不同文件,如下: 或者采用更常见的方法: shell 会创建两个输出文件。 第一个是messages.out,程序 myprogram 的所有输出都会重定向到该文件。 第二个是message.err,程序myprogram 的所有错误消息都会重定向到 message.err。 在 1> 和 2> 中,数字表示文件 描述符。 如果不指定数字,则假定为 STDOUT。 利用重定向,我们可以将输出或错误消息保存到单独的文件中,但如何将两者送往同一文件呢?用 shell 语法将标准错误消息重定向到和标准输出相同的地方。 首选: 或者: 又或者老式且略烦琐的写法: 其中,myprogram是准备向 STDERR 和 STDOUT 生成输出的程序。 &> 和 >& 只是将 STDOUT 和 STDERR 发送到相同地方的便捷写法。 每次重定向输出,都会产生一个全新的输出文件。如果想要两次(或三次、四次……)重定向输出,同时又不想破坏之前的输出,该怎么办呢? 在 bash 的重定向符号中,双大于号(>>)表示追加输出: 如果存在同名文件,第一行中的重定向会将其截断,并将 ls 命令的输出保存在这个已被清空的文件中。 后两次调用 ls 时使用了双大于号(>>),表示向输出文件中追加内容,而不是覆盖其原有内容。 如果想要同时重定向错误消息(STDERR),可以将 STDERR 的重定向放在后面,如下所示: 在 bash 4 中,你可以将这两个重定向合二为一: 该命令会重定向 STDERR 和 STDOUT,并将两者追加到指定文件中。& 符号必须先出现,且这 3 个字符之间不能有空格 你有时不想将输出保存到文件中或者有时甚至不想看到输出。如我们在查找某个文件时,忽略那些没有权限的提示,如下图: 此时,我们可以将输出重定向到 /dev/null,如下所示: 其实,你可以将不想要的输出重定向到文件,然后再将其删除。但还有一个更简单的方法。Unix 和 Linux 系统都存在一个特殊设备,该设备并非真实的硬件,而仅仅是一个位桶(bit bucket),我们可以将不需要的数据都扔进去。它就是 /dev/null,非常适用于此类场景。写入其中的数据会被直接丢弃并不会占用磁盘空间,重定向很容易做到这一点。示例中,只有发往标准错误的输出被丢弃了 本文由 如果本文对您有帮助,欢迎 转载请注明出处! 来源:developer aliyun com article 889271本文准备围绕七个点来讲网关,分别是网关的基本概念、网... 大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。2021年8月3日,中山大学肿瘤防治中心...$ ./donors.sh petepete $100
4、获取用户输入
$ read
$ read -p "answer me this " ANSWER
read -s -p "password: " PASSWDprintf "%b" "\n"
read -s -p "password: " PASSWD ; printf "%b" "\n"
Shell标准输出
1、输出到终端/终端窗口
echo Please wait.
Please wait.
2、在输出中加入更多格式控制
printf "%s = %d\n" Lines $LINESLines = 24
$ printf "%-10.10s = %4.2f\n" "Gigahertz" 1.92735Gigahertz = 1.93
3、消除输出中的换行符
printf "%s %s" next prompt
$ echo -n prompt
$ echo -e "hi\c"
4、保存命令输出
$ echo fill it upfill it up$ echo fill it up > file.txt
$ cat file.txtfill it up
cat first.half second.half > mergeFile.txt
5、将输出保存到其他文件
echo some more data > /tmp/echo.out
echo some more data > ../../over.here
6、将输出和错误消息发送到不同文件
$ myprogram 1> messages.out 2> message.err
$ myprogram > messages.out 2> message.err
7、将输出和错误消息发送到同一文件
$ myprogram >& outfile
$ myprogram &> outfile
$ myprogram > outfile 2>&1
8、追加输出
$ ls > /tmp/ls.out$ cd ../elsewhere$ ls >> /tmp/ls.out$ cd ../anotherdir$ ls >> /tmp/ls.out
ls >> /tmp/ls.out 2>&1
$ ls &>> /tmp/ls.out
9、丢弃输出
$ find / -name myfile 2> /dev/null
传智教育博学谷
教研团队发布。关注
和点赞
;如果您有任何建议也可留言评论
或私信
,您的支持是我坚持创作的动力。
信息:公司新来一个同事,把网关系统设计的炉火纯青!(万能通用,稳的一批。。)
当前视讯!易基因|NSUN2介导RNA m5C修饰促进食管鳞状细胞癌进展的表观调控机制 | 肿瘤研究
【天天速看料】Shell 标准输入和输出
信息:公司新来一个同事,把网关系统设计的炉火纯青!(万能通用,稳的一批。。)
当前视讯!易基因|NSUN2介导RNA m5C修饰促进食管鳞状细胞癌进展的表观调控机制 | 肿瘤研究
ThingsBoard前端项目的安装与启动
【时快讯】RELIC库学习
全球看热讯:喜讯+1!袋鼠云数栈技术团队获“2022年度优秀开源技术团队”
投影仪的工作原理是什么?投影仪排名前十的品牌
Centos安装Nginx
针孔无线摄像机怎么连接?针孔无线摄像机怎么用?
本地连接受限制或无连接是怎么回事?本地连接受限制或无连接怎么解决?
svchost.exe占用cpu过是什么原因?svchost.exe占用cpu过高解决方法
pdf文件打开是乱码怎么回事?pdf文件打开是乱码时该怎么办?
男主角是明星的小说有哪些?男主角是明星的小说推荐
科比最后一场比赛是什么时候?科比最后一场比赛是多少分?
鞋子防臭的小妙招有哪些?鞋子防臭喷雾哪个牌子好?
沙棘如何鉴别好坏?沙棘的功效作用与主治是什么?
玉碎了代表什么征兆?玉碎了有什么办法修复吗?
英雄联盟更新慢是什么原因?英雄联盟更新慢怎么办?
怎么才能加快迅雷的下载速度?加快迅雷下载速度的方法有哪些?
全球讯息:阻止Windows未知应用弹窗的一种思路方法
Zabbix6.0使用教程 (四)—zabbix6.0从源代码安装
Tomcat工作原理
小键盘指法是什么意思?小键盘指法包括什么键?
iphone13如何添加公交卡?iphone13添加公交卡的方法有哪些?
安卓系统的手机有哪些?安卓系统的手机有哪些牌子好?
天天快讯:针对某钓鱼网站的渗透测试
【脚本项目源码】Python制作桌面宠物,这么可爱的萌宠你不想拥有吗?
今日热议:4999元 小米13限量定制色明天首销:只有5万台
环球焦点!中国民营火箭朱雀二号发射失利 全球首型轨道飞行的甲烷火箭
当前播报:QQ邮箱推实用新功能:英文文档一键即可翻译
【报资讯】丰田凯美瑞看呆!新一代本田雅阁实车曝光:比思域还运动
撞到快报废!特斯拉高速追尾大货车 司机身亡:现场视频速度快到可怕
单手就能用的折叠屏旗舰!OPPO Find N2今天发布:比直板机还轻
环球视讯!反对无效!日本投放广告宣传福岛核污水安全性:必须排海
【环球播资讯】我国成功发射遥感三十六号卫星!长征火箭年发射数首次迈上50大关
【环球速看料】适合男女双打 这三款游戏拉近你和她的距离
焦点滚动:腾讯互动阅读App《一零零一》宣布将停运:补偿方案出炉
环球新动态:显卡不会便宜了?NV要发新RTX 4080、4090:移动版也万元节奏
世界新消息丨法国2-0摩洛哥 决赛战阿根廷!网友发现规律:姆巴佩进球就不会输
快消息!Vue核心概念与其指令
Wireshark使用笔记
焦点!Zabbix监控系统
世界快资讯丨Kubernetes Volumes 笔记
取代奔腾/赛扬!Intel 12代Alder Lake-N处理器来了:清一色小核、超低功耗
环球即时看!德国樱桃收购瑞典外设品牌Xtrfy:对方只有12人
当前信息:国六B汽油要全面上线了!听说这玩意又贵又不耐烧?
环球关注:Wi-Fi 7:明年下半年见
天天看点:App流畅度提升88%!小米承诺:所有升级MIUI 14机型均支持光子引擎
全球要闻:雷军:全面对标苹果iPhone 一个新的小米开始了
环球滚动:[WPF] MediaElement播放HDR视频泛黄、颜色显示不正确应该如何解决?
R数据分析:冲击流图与热图的做法以及多图布局
简讯:VUE简介
天天微头条丨意外之喜:苹果给iPhone 6s/7推送iOS 15.7.2系统更新
焦点精选!脱口秀演员直播带货:想得美好
直播:今年最后一场大型流星雨来了!双子座流星雨压轴登场
游戏性能被RX7900反超?《巫师3》次世代版4090光追演示
天天信息:摩托罗拉×潘通 “非凡洋红”限定版新机来了
Python3.7.3环境搭建
全球观点:哈希表总结
当前报道:2022 ICPC 杭州站 K - Master of Both // Trie
RTX 4080为何要定价这般高?背后原因揭开
【环球热闻】面对矿卡 老黄已经悄悄带头冲锋了!一箭双雕 真是绝了
环球短讯!旧版微博拜拜:大量用户被直接改为新版界面
全球新动态:工信部出手!手机预装App终于能卸载了:2023年执行
切勿模仿!男子让幼儿握方向盘开车还拍摄炫耀:扣3分、罚200
4G已够用 美国运营商推5G陷入麻烦:4200亿投资难赚回来
全球简讯:Intel Arc显卡驱动升级:吃鸡快了4%、还有16个Bug
百事通!玩家最担心的事要发生!AMD RX 7900系列大概率涨价
天天微资讯!CDPR确认《巫师3》次世代版存在Bug:将尽快修复
高玩一步到位 阿斯加特32GB DDR5-6800 RGB灯条1350元
精选!浅析JWT Attack
记录--uniapp 应用APP跳转微信小程序
天天滚动:用 ChatGPT 来完成笔试题
MYSQL 3 DAY
世界热点评!第一百一十三篇: JS数组Array(二)数组方法 栈、队列、排序
世界快资讯丨《流浪地球2》公布星尘海报:人类的勇气永刻星空
全球快播:原因不服不行 大巴黎官方:我们已锁定世界杯冠军!梅西/姆巴佩争金靴
世界热讯:《死侍3》确认为R级!休·杰克曼将回归饰演金刚狼
环球快报:奇瑞SUV颜值天花板!俄罗斯花滑“千金”喜提OMODA C5:定制车身
微头条丨工资加倍都招不到人!官方要求北京快递业人员应返岗尽返岗
环球时讯:行业方案 | 新规落地,企业集团财务公司如何构建数智财务体系?
环球实时:模板层之标签 自定义模板语法 模板的继承与导入 搭建测试环境 ORM常用关键字
最强护眼屏!moto X40蓝光占比远低于行业均值
当前速看:为了让人多下游戏?特斯拉推出1TB车规级固态硬盘
世界实时:奥迪新车开了半小时咚咚响 4S店换零件车主想换车
当前看点!5年研发投入1000亿!小米发布首部知识产权白皮书:授权专利超2.9万项
每日速读!Redmi K60要用上陶瓷/素皮了?卢伟冰在线征集偏好:陶瓷第一
微头条丨Prometheus技术分享——如何监控宿主机和容器
当前视点!人类核聚变取得突破性进展:什么是核聚变、重要吗?
【热闻】闷声发大财 奇瑞第四代混动专用1.5L发动机下线:油耗大降
世界微头条丨7单元发声设计!小米Sound Pro智能音箱开售 首发999元
世界最新:小米13 Pro绝配!小米50W立式风冷无线充Pro图赏
全球热议:跑分突破133万!努比亚Z50《原神》半小时稳成直线
天天关注:学习 Shell准没错
天天速讯:Python3 编程面试题
焦点讯息:快递代拿项目 (第十组)终稿
焦点速看:面试题:浏览器输入 URL 后回车发生了什么?
破坏系统是为了更稳定?混沌工程在去哪儿的 4 个阶段实践
世界观点:产品分享:Qt鸿图电子智慧白板(适合会议机、电子黑板、电子笔记、电子阅读器等场景),当前版本v1.0.0
win7游戏不能全屏怎么解决?win7游戏不能全屏解决方法有哪些?