zoukankan      html  css  js  c++  java
  • shell编程学习笔记之标准输入输出(read&echo)

    2017-07-17 09:32:07


    输入read:

      用途:

        从标准输入读取一行,或者从文件描述符FD(file descriptor)中读取一行,并且将其分割成字段。  

    用法:

      read [-ers] [-a 数组] [-d 分隔符] [-i 缓冲区文字] [-n 读取字符数] [-N 读取字符数] [-p 提示符] [-t 超时] [-u 文件描述符] [名称 ...]

      常用选项:  

    -a:(arrary) 将读取得的字符划分成单词,按照数组存储(从0开始)


    源码:

    #!/bin/bash echo "按照单词的分割放置到数组中,索引从0开始" read -a variable echo "第1个:" echo ${variable[0]} echo "第2个:" echo ${variable[1]} echo "第3个:" echo ${variable[2]} echo "第4个:" echo ${variable[3]}

    运行效果:

    按照单词的分割放置到数组中,索引从0开始
    34 ew qr34 3qr wer er qw
    第1个:
    34
    第2个:
    ew
    第3个:
    qr34
    第4个:
    3qr

     

    -n:接收指定个数的字符,当达到接收的个术后,立即退出输入状态


    源码:
    #-n read接收10个字符 
    echo "-n read接收10个字符"
    read
    -n 10 num
    echo
    echo "接收的10个字符是:"${num}

    运行效果:

    -n read接受10个字符
    sgfgsngfdf
    接收的10个字符是:sgfgsngfdf


    -p : 允许在read命令后直接指定一个提示,并且可以为多个变量赋值


    源码:
    echo "使用-p参数完成多个变量赋值:" 
    read
    -p "请输入三个数字或字符:(用空格隔开)" num1 num2 num3

    echo "num1="$num1
    echo "num2="$num2
    echo "num3="$num3

    运行效果:
    使用-p参数完成多个变量赋值:
    请输入三个数字或字符:(用空格隔开)23 34 345 
    num1=23
    num2=34
    num3=345
     


    -r:不允许反斜线转义任何字符


    -s:不将read输入的数据显示在屏幕上


    源码:
    #-s read的输入不显示在屏幕上 

    echo "-s read的输入不显示在屏幕上:"
    read
    -p "password:" -s password

    echo
    echo "password is "${password}

    运行效果:

    -s read的输入不显示在屏幕上:
    password:
    password is 3432 rq erewr w


    -t :read命令等待输入的秒数。当计时满时,回返回一个非0的状态,并且退出等待输入。


    源码:
    #-t read的输入的等待时间 
    echo "将会等等待两秒的输入,超时后,会退出等待;返回非0数值"
    read
    -t 2 num
    echo ${num}

    运行效果:

    将会等等待两秒的输入,超时后,会退出等待;返回非0数值


    -u:从文件描述符FD(file descriptor)读取。

     

      补充内容文件描述符FD
      文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIXLinux这样的操作系统。
      习惯上,标准输入(standard input)的文件描述符是 0,标准输出(standard output)是 1,标准错误(standard error)是 2。尽管这种习惯并非Unix内核的特性,但是因为一些 shell 和很多应用程序都使用这种习惯,因此,如果内核不遵循这种习惯的话,很多应用程序将不能使用。

     从文件读取的例子:

    
    
    源码:
    # read接受文本作为输入
    echo " read接受文本作为输入"
    cat test.sh | while read line  #cat 命令的输出作为read命令的输入,read读到的值放在line中
    do
        echo 
        echo "接收的文本字符是:"${line}
    done


    运行效果:
    read接受文本作为输入
    
    接收的文本字符是:#------------------------------------------
    
    接收的文本字符是:#------------------------------------------
    
    接收的文本字符是:# read接受文本作为输入
    
    接收的文本字符是:echo " read接受文本作为输入"
    
    接收的文本字符是:cat test.sh | while read line
    
    接收的文本字符是:do
    
    接收的文本字符是:echo
    
    接收的文本字符是:echo "接收的文本字符是:"${line}
    
    接收的文本字符是:done

    2017-07-18  09:24:25


    输出(echo):

      用途 :在标准输出上输出传递过来的内容。

      用法:    

        echo [SHORT-OPTION]... [STRING]...

      常用选项:

        -n : 输出内容不换行

    
    
    源码:
    #-n 输出文字不换行
    echo -n "this is a test echo "

    运行效果:
    this is a test echo hello 
    

        -e:输出特殊字符的含义,也就是输出字符转义后的意义。

    
    
    源码:
    #-e 输出特殊字符
    echo  "hello ,
     my name 	is ***"
    echo -e "hello ,
     my name 	is ***"
    
    
    运行效果:

    hello , my name is ***
    hello ,
    my name is ***

        特殊字符及其作用:

    字符 作用
         插入tab
         换行并且光标移动至行首
    f      换行但光标停留在原来的位置
         删除前一个字符
         光标移动至行首,但不换行
    \     插入字符

        

  • 相关阅读:
    http://www.reg007.com/
    快速入门:十分钟学会Python(转)
    Python入门教程 超详细1小时学会Python(转)
    值得关注的10个python语言博客(转)
    【.NET特供-第三季】ASP.NET MVC系列:MVC与三层图形对照
    LeetCode——Spiral Matrix
    HTML中Select的使用具体解释
    为什么没有好用的Android游戏引擎?
    Map.EntrySet的使用方法
    jquery 仅仅读
  • 原文地址:https://www.cnblogs.com/zhuandshao/p/7190098.html
Copyright © 2011-2022 走看看