shell脚本编程-处理输入输出

一、读取用户输入

(1)基本的读取命令

read命令接受从标准输入或文件描述符的输入,并将接收到的数据赋值到一个变量。

1 $ cat read.sh
2 #!/bin/bash
3 # test the read command
4 echo -n "please input your name: "
5 read name
6 echo "Hello $name"

read命令的-p选项,可以直接在read命令行指定提示符,如上一例子可以写为

read -p "please input your name: " name

read可以接收多个用户输入值,并赋值到多个变量,如果变量表在数据之前用完,则剩下的数据就会分配到最后一个变量

read -p "please input your name: " first last
echo "Hello $first.$last"

如果在read命令行不指定变量,read命令将会把用户输入的数据放入特殊环境变量REPLY中。

(2)读取超时

read命令使用时,如果用户没有输入会一直等待;使用-t选项可以指定超时时间,单位为秒。

读取超时后,read命令会返回一个非0的状态退出码。如:

read -t 5 -p "please input your name: " name

可以使用-n选项指定读取的字符数,read命令读取到相应字符后会自动退出,不需回车。

(3)隐藏方式读取

需要读取用户输入,但不希望输入显示在屏幕上,可以使用-s选项。

read -t 5 -s -p "please input your passwd: " passwd

二、输入输出重定向

(1)标准文件描述符

linux系统将每个对象当作文件来处理,使用文件描述符来标识每个文件对象。文件描述符是一个非负数,可以唯一标识回话中打开的文件。每个过程最多可以有9个文件描述符。bash shell保留了3个文件描述符0、1和2。

0 — STDIN     — 标准输入

1 — STDOUT — 标准输出

2 — STDERR  — 标准错误

一般命令的标准输入是键盘,标准输出和标准错误的输出是屏幕。

使用 < 重定向标准输入,使用 > 重定向标准输出。

(2)重定向错误

使用重定向时,若产生错误,如

ls -l badfile > test
ls: 无法访问badfile: 没有那个文件或目录

错误提示输出到屏幕上,test文件被创建,但是为空。

如果希望将错误提示输出到文件中,需要在重定向符号>前加上标准错误的描述符2

ls -l badfile 2> test
$ cat test
ls: 无法访问badfile: 没有那个文件或目录

如果需要将标准输出和标准错误都重定向到文件,需要分开处理,如:

ls -l goodfile badfile 2> test_err 1> test

这样可以将错误提示和标准输出重定向到不同的文件中。

bash shell提供了特殊的重定向符&> 可以将STDERR和STDOUT的输出重定向到同一文件中。

(3)在脚本中重定向输出

临时重定型:如果需要将STDOUT的消息转换成STDERR的输出,可以通过在输出的行后加 <&2

echo "this is a error message" >&2

这样这行命令的输出则会显示在STDERR文件描述符所指向的任何位置,而不再是STDOUR。

永久重定向:可以通过exec命令告诉shell脚本执行期间重定向某个特定的文件描述符。

1 #!/bin/bash
2 #redirecting alloutput
3 exec 1>testfile
4 echo "this is a test of redirecting alloutput"

(4)在脚本中重定向输入

exec命令允许将STDIN重定向到文件中,如:

exec 1< file

这个命令告诉shell需要从file中获取输入,而不是STDIN。

1 #!/bin/bash
2 #redirecting file input
3 exec 0< testfile
4 count=1
5 while read line; do
6     echo "Line #$count: $line"
7     count=$[ $count + 1 ]
8 done

当运行read命令时,不再需要用户通过键盘输入,而是直接从testfile文件中读取数据。

时间: 2024-10-08 11:35:00

shell脚本编程-处理输入输出的相关文章

shell脚本编程学习笔记(1)

在linux上编程,离不开shell,计划好好看看shell编程,并在这里做些笔记以供有相同兴趣的人分享,主要参考<shell脚本学习指南>. 学习shell脚本编程之前,需要了解脚本编程语言和编译型语言的概念. 一般很多中型.大型的程序是用编译型语言写成的,比如C.C++.Java等.这类程序从源代码编译成目标代码,直接通过计算机执行.编译型语言执行效率比较高,大多运作于底层,处理的是字节.整数.浮点数等机器层级的对象,因此实现一个具体的功能,比如"将一个目录里的所有文件复制到另外

Shell脚本编程知识点总结及范例

 一:关于语言 1)编译性语言 编译型语言多半运作于底层,所处理的是字节.整数.浮点数或其它及其机器层经的对象.处理过程为:源程序--预处理--编译--汇编--链接,编译性语言为静态语言. 2)解释性语言 解释性语言读入程序代码并将其转化为内部的形式加以执行.处理过程:解释性(文本文件)-解释器去读取并执行.解释性语言为动态语言. 二:基础 变量类型 linux脚本中的变量不需要事先声明,而是直接定义使用(这点不同于其他高级编程语言中变量的使用)bash变量类型分为本地变量和环境变量. 本地变量

shell脚本编程——流程控制

shell脚本编程--流程控制 目   录 一. if 二. case 三. for 四. while 五. until 六. 综合应用 一.if 1.语法 (1)单分支 if  判断条件:then fi (2)双分支 if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 fi (3)多分支 if 判断条件1; then 条件为真的分支代码 elif 判断条件2; then 条件为真的分支代码 elif 判断条件3; then 条件为真的分支代码 else 以上条件都为假

shell脚本编程的选择分支结构

选择执行结构: if语句单分支结构:如果条件为真,则执行then后的命令,否则,不做任何操作: if CONDITION :then STATEMENT fi 或 if CONDITION ; then STATEMENT1 STATEMENT2 ... fi 注意:想要执行then后面的STATEMENTS,前提条件是CONDITION部分为真: if语句的双分支结构:如果条件为真,就执行then后面的命令:否则就执行else后面的命令: if CONDITION ; then STATEME

shell脚本编程的一些好习惯

shell脚本编程的一些好习惯 1.命名规则 脚本命名以.sh结尾,名称尽量见名之意.以下是几种可供参考的脚本命名风格.通过以下清新脱俗的风格,读者能够很easy的明白脚本的作用.         clearlog.sh          ClearLog.sh          clearSql.sh         snmp_install.sh         Monitor.sh 2.脚本信息 为脚本加入生动的信息,比如脚本功能的描述,作者,时间,版本信息等.     #!/bin/ba

shell脚本编程之基础篇(二)

shell脚本编程之基础篇(二) ============================================================================== 概述: ============================================================================== 退出状态 ★进程使用退出状态来报告成功或失败 ◆0 代表成功,1-255代表失败 ◆$? 变量保存最近的命令退出状态 (查看:echo $?)

Linux系统shell脚本编程——生产实战案例

Linux系统shell脚本编程--生产实战案例     在日常的生产环境中,可能会遇到需要批量检查内网目前在线的主机IP地址有哪些,还可能需要检查这些在线的主机哪些端口是开放状态,因此依靠手工来检查是可以实现,但比较费时费力,所以需要结合shell脚本来实现批量检查的功能,那么今天就来做个小小的实验. 1.开发脚本前准备 一般大家都知道,测试主机是否在线,常用的命令无非就是ping.nmap,因此,首先找一个地址来测试下ping命令的效果 [[email protected] scripts]

Linux中的shell脚本编程——函数

概述: 本章节将总结while,for循环语句的特殊用法,在不同的场景当中,更能发挥其功能和价值.除此之外,还会介绍一种特殊的循环语句select语句,实现菜单的作用.最重要的是讲解shell脚本编程中函数的用法.这些内容都要熟练掌握. 一.循环语句的特殊用法: 1.while循环的特殊用法(遍历文件的每一行): □语法:while read line; do 循环体 done < /PATH/FROM/SOMEFILE □意义:依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将

Linux 的shell脚本编程

shell脚本编程 程序:指令+数据 程序编辑风格:             过程式:以指令为中心,数据服务于指令             对象式:以数据为中心,指令服务于数据 shell程序:提供了编程能力,解释执行 计算机:运行二进制指令 编程语言: 低级:汇编语言 高级:编译:高级语言-->编译器-->目标代码 java,c#,c,c++ 解释:高级语言-->解释器-->机器代码 shell,per,python 编程逻辑处理方式:           顺序执行