zoukankan      html  css  js  c++  java
  • 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文件中读取数据。
  • 相关阅读:
    IOS调试下载的demo出现说项目不能在什么的SDK调试
    IOS手势基本用法
    IOS没有服务器断怎么调试Push代码
    VS Tips (Advance part)
    [转]如何理解C runtime library (C运行时库)
    Use AQTime to find the bottleneck of program module
    [转]Reflection: Discovery and Execution
    如何禁止生成stack对象或heap对象
    VS Tips (Basic part)
    栈对象、堆对象、静态对象的比较
  • 原文地址:https://www.cnblogs.com/hancq/p/5202872.html
Copyright © 2011-2022 走看看