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 ...
随机推荐
- 【尺取法好题】POJ2566-Bound Found
[题目大意] 给出一个整数列,求一段子序列之和最接近所给出的t.输出该段子序列之和及左右端点. [思路] ……前缀和比较神奇的想法.一般来说,我们必须要保证数列单调性,才能使用尺取法. 预处理出前i个 ...
- [CodeForces-763C]Timofey and remoduling
题目大意: 告诉你一个长度为n的等差数列在模m意义下的乱序值(互不相等),问是否真的存在满足条件的等差数列,并尝试构造任意一个这样的数列. 思路: 首先我们可以有一个结论: 两个等差数列相等,当且仅当 ...
- python开发_python代码风格(coding style)
我们要做python开发,我想python中的代码风格我们有必要了解一下 这样对我们自己和他们所编写的代码都有好处的. 下面是8点重要代码风格注意事项: ONE : Use 4-space inden ...
- iOS11 获取手机已安装应用列表
在iOS 11 以前我们可以使用LSApplicationWorkspace来获取手机上已安装的应用列表 iOS 11 上获取所有已安装应用接口被禁,但可以根据BundleId检查App是否存在 - ...
- 普通主板设置BIOS实现电脑插电自动启动
说明: 1.为什么要实现这种功能,很多时候在民间都基本用普通PC来做小型服务器,公司的私服等等,而这些普通PC在民用电环境中经常会停电,一停就会导致服务器不能自动来电重启,所以这个功能来点开机是必须的 ...
- Circuit translates I2C voltages
This Design Idea explores level-shifting an I2C bus from 5V/ground (positive domain) to ground/–5V ( ...
- Two PWM outputs from MCU combine to form a monotonic 16-bits DAC
http://www.edn.com/design/analog/4329365/Combine-two-8-bit-outputs-to-make-one-16-bit-DAC
- ida sdk add_struc_member array
tid_t tid = get_struc_id ( "foo_type" ) ; struc_t * sptr = get_struc ( tid ); if ( sptr == ...
- Spring MVC概述
Spring MVC框架是一个开源的Java平台,为开发强大的基于Java的Web应用程序提供全面的基础架构支持非常容易和非常快速. Spring框架最初由Rod Johnson撰写,并于2003年6 ...
- Linux使用RPM安装软件
什么是RMP? RPM 的为Redhat Package Manager (RPM软件包管理器)的缩写. RPM包,这种软件包就像windows的EXE安装文件一样,各种文件已经编译好,并打了包,哪个 ...