shell学习三十二天----read读取一行
标准输入输出与标准错误输出
标准输入/输出可能是软件工具设计原则里最主要的观念了.他的构想是:程序应有一个数据来源,数据出口(数据要去哪里),以及报告问题的地方.他们分别叫做标准输入,标准输出和标准错误输出.程序应该不知道也不在意其输入与输出背后是还有一个运行的程序!程序能够预期,在他启动的时候,这些标准位置都已打开,且已经准备好能够使用了.
默认情况下,程序会读取标准输入,写入标准输出,并将错误信息传递给标准错误输出.这种程序我们称为过滤器,由于他们过滤数据流,每个都会在数据流上运行某种运算,再通过管道,将它传递给下一个.
使用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
关于特殊符号的參考:
shell学习三十二天----read读取一行的更多相关文章
- [Bash Shell] Shell学习笔记
1. Shell简介 Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命 ...
- shell学习笔记
shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...
- Shell学习之Shell特性(一)
Shell学习之Shell特性 目录 命令和文件自动补齐功能 命令历史记忆功能 history.上下键.!number.!string.!$.!! 别名功能 alias.unalias cp.~use ...
- [转帖][Bash Shell] Shell学习笔记
[Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html 阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...
- shell学习笔记汇总
1.shell脚本中函数使用 函数定义在前,调用在后,顺序反了就没有效果了.函数调用为:函数名 参数列表 函数内部通过以下变量访问函数的参数:shell脚本函数中: $0: 这个脚本的名字 $n: 这 ...
- Shell学习(七)——sort、uniq、cut、wc命令详解
Shell学习(七)--sort.uniq.cut.wc命令详解 转自:[1]linux sort,uniq,cut,wc命令详解 https://www.cnblogs.com/ggjucheng/ ...
- 【转】shell学习笔记(一)——学习目的性、特殊字符、运算符等
1 学习shell的目的性 写之前我们先来搞清楚为什么要学shell,学习要有目的性 shell简单.灵活.高效,特别适合处理一些系统管理方面的小问题 shell可以实现自动化管理,让系统管理员的工作 ...
- Shell学习之环境变量配置文件(三)
Shell学习之环境变量配置文件 目录 环境变量配置文件简介 环境变量配置文件作用 其他配置文件和登录信息 环境变量配置文件简介 环境变量配置文件简介 环境变量配置文件中主要是定义对系统操作环境生效的 ...
- go学习之文件读取问题(需更新)
go学习之文件读取问题(需更新) 一,问题: 今天做一个GO广度迷宫问题时,出现了一个奇怪的问题. 就是通过fmt.Fscanf()读取文件时,每行末尾多出一个0. 二,问题代码: 1,输入文件maz ...
随机推荐
- 51nod部分容斥题解
51nod1434 区间LCM 跟容斥没有关系.首先可以确定的一个结论是:对于任意正整数,有1*2*...*n | (k+1)*(k+2)*...*(k+n).因为这就是$C_{n+k}^{k}$. ...
- POJ 3764 The xor-longest Path trie树解决位运算贪心
http://poj.org/problem?id=3764 题意 : 一颗树,每个边有个值,在树上找一条简单路径,使得这条路径上的边权异或值最大 先找到所有节点到一点的距离 , 显然dis( x ...
- Inverted bipolar transistor doubles as a signal clamp
A number of circuits, such as level detectors and AM demodulators, benefit from a rectifier with a l ...
- SQL Server需要监控哪些计数器 ---指尖流淌
http://www.cnblogs.com/zhijianliutang/p/4174697.html
- SpringSecurity3整合CAS实现单点登录
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- SASS输出风格
嵌套输出方式 nested sass --watch test.scss:test.css --style nested 嵌套输出方式 expanded sass --watch test.scss: ...
- AIR:使用 HTML + Javascript 开发桌面应用
背景 断断续续用Winform和WPF开发过一些小工具,始终不得其法门,在玩Flex的时候就接触过AIR,最近发现可以用HTML + Javascript开发AIR应用,本文就尝试一下(Hello,W ...
- C#笔试题面试题锦集(全)总20篇
前些时候找过一次工作,收集了很多不错的笔试题目.共享一下:) C#笔试题面试题锦集(20) 微软应试题目 (2010-01-15 21:32) C#笔试题面试题锦集(19) 雅虎C#题目 (2010- ...
- thymleaf th:if标签
1.概念 <table> <tr> <th>NAME</th> <th>PRICE</th> <th>IN STOC ...
- python的异常机制使用技巧
1.当你开发的接口被其他应用调用时,响应要及时,但是有些要触发的操作很耗时间. 比如下面需要通过被调用触发的函数create_job_1().但是这个函数执行会比较消耗时间 2.于是,我们可以利用异常 ...