shell学习三十二天----read读取一行_shell命令read读一行-程序员宅基地

技术标签: shell  shell脚本编程  

标准输入输出与标准错误输出

标准输入/输出可能是软件工具设计原则里最基本的观念了.他的构想是:程序应有一个数据来源,数据出口(数据要去哪里),以及报告问题的地方.他们分别叫做标准输入,标准输出和标准错误输出.程序应该不知道也不在意其输入与输出背后是另一个执行的程序!程序可以预期,在他启动的时候,这些标准位置都已打开,且已经准备好可以使用了.

 

默认情况下,程序会读取标准输入,写入标准输出,并将错误信息传递给标准错误输出.这样的程序我们称为过滤器,因为他们过滤数据流,每一个都会在数据流上执行某种运算,再通过管道,将它传递给下一个.

 

使用read读取行

read命令是用于从终端或者文件中读取输入的内部命令,read命令读取整行输入,每行末尾的换行符不被读入.read后面,如果没有指定变量名,读取的数据将被自动赋值给特定的变量REPLY.

语法:

read [-r] variable

用途:将信息读入一个或多个shell变量

主要选项:

-r:原始读取,不作任何处理.不将行结尾处的反斜杠解释为续行字符.

行为模式:

自标准输入读取行(数据),通过shell字段切割的功能(使用$IFS)进行切分.第一个单词赋值给第一个变量,第二个单词则赋值给第二个变量,以次类推.如果单词多于变量,则所有剩下的单词,全赋值给最后一个变量.read一旦遇到文件结尾,会以失败退出.

如果输入行以反斜杠结尾,read会丢弃反斜杠与换行符,然后继续读取下一行数据.如果使用-r选项,那么read便会以字面意义读取最后的反斜杠.

 

警告:

当你将read应用在管道里时,许多shell会在一个分开的进程内执行它.在这种情况下,任何以read所设置的变量,都不会保留他们在父shell里的值.对管道中间的循环,也是这样.

 

案例一:

bash代码:

#!/bin/bash

read -p "input Numbers"

echo $REPLY

执行结果为:input Numbers $REPLY(你所输入的数字)

 

案例二:

#!/bin/bash

two()

{

        read -p "input 2 numbers" v1 v2

        echo $(($v1+$v2))

}

two

 

执行: ./read1.sh 

输出结果:input 2 numbers  5 6

11

 

案例三:

#!/bin/bash

read -n 1 -p "Do you want to continue [Y/N] ? " answer

case $answer in

        Y|y)

        echo "continue"

        ;;

        N|n)

        echo "break"

        ;;

        *)

        echo "error"

        ;;

esac

exit 0

分析:该例子使用了-n选项,-n选项的意思是说后面可以接受多少个字符的输入,这里指定了1表示接受一个字符就退出,也就是说只要按下一个键就会立即接受输入并将其传递给变量.无需按回车符.

 

案例四:

#!/bin/bash

if read -t 5 -p "please enter your name:" name

then 

        echo "hello $name,welcome to my world"

else

        echo "sorry ,too slow"

fi

exit 0

分析:这里使用了-t选项,使用read命令会存在潜在的危险.脚本很可能会停下来一直等待用户的输入.如果无论是否输入数据脚本都必须继续执行,那么可以使用-t选项指定一个定时器.-t选项指定read命令等待输入的秒数.当计数达到-t执行的时间时,read命令返回一个非零退出状态.-t选项后面指定的是秒数.

案例五:

#!/bin/bashread  -s  -p "Enter your password:" passecho "your password is $pass"exit 0 

分析:s选项能够使read命令中输入的数据不显示在监视器上(实际上,数据是显示的,只是read命令将文本颜色设置成与背景相同的颜色)。

案例六:

如何得到一个只有IP的字符串?

/sbin/ifconfig eth0 | grep Bcast | sed -e 's/^.* addr:\(.*\) Bcast.*$/\1/'

 

想要实现输入一个IP跟机器上的IP对照,观察是否存在.

#!/bin/bash

ip=$(/sbin/ifconfig eth0 | grep Bcast | sed -e 's/^.* addr:\(.*\) Bcast.*$/\1/')

read var

#echo $ip

if [ "$var" = "$ip" ]

then

        echo "Ok"

else

        echo "no"

fi

分析:回顾一下sed命令,sed命令是一种在线编辑器,一次处理一行内容.sed命令的-e选项是说多点编辑,此处相当于:

ifconfig eth0 |grep "inet" | sed 's/^.*addr://g'| sed 's/Bcast.*$//g'

sed参考连接:

http://blog.csdn.net/dawnstar_hoo/article/details/4043887

 

 

关于特殊符号的参考:

http://www.ahlinux.com/shell/9964.html

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shanyongxu/article/details/46680951

智能推荐

linux devkmem 源码,linux dev/mem dev/kmem实现访问物理/虚拟内存-程序员宅基地

文章浏览阅读451次。dev/mem: 物理内存的全镜像。可以用来访问物理内存。/dev/kmem: kernel看到的虚拟内存的全镜像。可以用来访问kernel的内容。调试嵌入式Linux内核时,可能需要查看某个内核变量的值。/dev/kmem正好提供了访问内核虚拟内存的途径。现在的内核大都默认禁用了/dev/kmem,打开的方法是在 make menuconfig中选中 device drivers --> ..._dev/mem 源码实现

vxe-table 小众但功能齐全的vue表格组件-程序员宅基地

文章浏览阅读7.1k次,点赞2次,收藏19次。vxe-table,一个小众但功能齐全并支持excel操作的vue表格组件_vxe-table

(开发)bable - es6转码-程序员宅基地

文章浏览阅读62次。参考:http://www.ruanyifeng.com/blog/2016/01/babel.htmlBabelBabel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行// 转码前input.map(item => item + 1);// 转码后input.map(function (item) { return item..._让开发环境支持bable

FPGA 视频处理 FIFO 的典型应用_fpga 频分复用 视频-程序员宅基地

文章浏览阅读2.8k次,点赞6次,收藏29次。摘要:FPGA视频处理FIFO的典型应用,视频输入FIFO的作用,视频输出FIFO的作用,视频数据跨时钟域FIFO,视频缩放FIFO的作用_fpga 频分复用 视频

R语言:设置工作路径为当前文件存储路径_r语言设置工作目录到目标文件夹-程序员宅基地

文章浏览阅读575次。【代码】R语言:设置工作路径为当前文件存储路径。_r语言设置工作目录到目标文件夹

background 线性渐变-程序员宅基地

文章浏览阅读452次。格式:background: linear-gradient(direction, color-stop1, color-stop2, ...);<linear-gradient> = linear-gradient([ [ <angle> | to <side-or-corner>] ,]? &l..._background线性渐变

随便推点

【蓝桥杯省赛真题39】python输出最大的数 中小学青少年组蓝桥杯比赛 算法思维python编程省赛真题解析-程序员宅基地

文章浏览阅读1k次,点赞26次,收藏8次。第十三届蓝桥杯青少年组python编程省赛真题一、题目要求(注:input()输入函数的括号中不允许添加任何信息)1、编程实现给定一个正整数N,输出正整数N中各数位最大的那个数字。例如:N=132,则输出3。2、输入输出输入描述:只有一行,输入一个正整数N输出描述:只有一行,输出正整数N中各数位最大的那个数字输入样例:

网络协议的三要素-程序员宅基地

文章浏览阅读2.2k次。一个网络协议主要由以下三个要素组成:1.语法数据与控制信息的结构或格式,包括数据的组织方式、编码方式、信号电平的表示方式等。2.语义即需要发出何种控制信息,完成何种动作,以及做出何种应答,以实现数据交换的协调和差错处理。3.时序即事件实现顺序的详细说明,以实现速率匹配和排序。不完整理解:语法表示长什么样,语义表示能干什么,时序表示排序。转载于:https://blog.51cto.com/98..._网络协议三要素csdn

The Log: What every software engineer should know about real-time data's unifying abstraction-程序员宅基地

文章浏览阅读153次。主要的思想,将所有的系统都可以看作两部分,真正的数据log系统和各种各样的query engine所有的一致性由log系统来保证,其他各种query engine不需要考虑一致性,安全性,只需要不停的从log系统来同步数据,如果数据丢失或crash可以从log系统replay来恢复可以看出kafka系统在linkedin中的重要地位,不光是d..._the log: what every software engineer should know about real-time data's uni

《伟大是熬出来的》冯仑与年轻人闲话人生之一-程序员宅基地

文章浏览阅读746次。伟大是熬出来的  目录  前言  引言 时间熬成伟大:领导者要像狼一样坚忍   第一章 内圣外王——领导者的心态修炼  1. 天纵英才的自信心  2. 上天揽月的企图心  3. 誓不回头的决心  4. 宠辱不惊的平常心  5. 换位思考的同理心  6. 激情四射的热心  第二章 日清日高——领导者的高效能修炼  7. 积极主动,想到做到  8. 合理掌控自己的时间和生命  9. 制定目标,马..._当狼拖着受伤的右腿逃生时,右腿会成为前进的阻碍,它会毫不犹豫撕咬断自己的腿, 以

有源光缆AOC知识百科汇总-程序员宅基地

文章浏览阅读285次。在当今的大数据时代,人们对高速度和高带宽的需求越来越大,迫切希望有一种新型产品来作为高性能计算和数据中心的主要传输媒质,所以有源光缆(AOC)在这种环境下诞生了。有源光缆究竟是什么呢?应用在哪些领域,有什么优势呢?易天将为您解答!有源光缆(Active Optical Cables,简称AOC)是两端装有光收发器件的光纤线缆,主要构成部件分为光路和电路两部分。作为一种高性能计..._aoc 光缆

浏览器代理服务器自动配置脚本设置方法-程序员宅基地

文章浏览阅读2.2k次。在“桌面”上按快捷键“Ctrl+R”,调出“运行”窗口。接着,在“打开”后的输入框中输入“Gpedit.msc”。并按“确定”按钮。如下图 找到“用户配置”下的“Windows设置”下的“Internet Explorer 维护”的“连接”,双击选择“自动浏览器配置”。如下图 选择“自动启动配置”,并在下面的“自动代理URL”中填写相应的PAC文件地址。如下..._設置proxy腳本