zoukankan      html  css  js  c++  java
  • linux中read用法

    read在while中的经常用法:

     1 root@ubuntu:/var/lib/logrotate 10:53:05 118# cat /etc/cron.daily/logrotate 
     2 #!/bin/sh
     3 
     4 # Clean non existent log file entries from status file
     5 cd /var/lib/logrotate
     6 test -e status || touch status
     7 head -1 status > status.clean
     8 sed 's/"//g' status | while read logfile date
     9 do
    10     [ -e "$logfile" ] && echo ""$logfile" $date"
    11 done >> status.clean
    12 mv status.clean status
    13 
    14 test -x /usr/sbin/logrotate || exit 0
    15 /usr/sbin/logrotate /etc/logrotate.conf
    16 root@ubuntu:/var/lib/logrotate 10:53:19 119# 

    在上面中

    每次调用read命令都会读取文件中的”一行”文本。当文件没有可读的行时,read命令将以非零状态退出。

    通过什么样的方法将文件中的数据传给read呢?使用cat命令并通过管道将结果直接传送给包含read命令的while命令

    但是当用:

    1 root@ubuntu:/var/lib/logrotate 10:53:19 119# echo "aaa bbb" | read one two
    2 root@ubuntu:/var/lib/logrotate 10:54:50 120# echo $one

    one为空,

    但是:

    1 root@ubuntu:/var/lib/logrotate 10:56:11 124# echo "aaa bbb" | (read one two;echo -e "$one
    $two")
    2 aaa
    3 bbb

    解释:

    这里的问题在于read one是有管道产生的进程,而echo $one是外面的进程,两个one不是同一个变量,所以打印出来one没有数据

    -a: 将输入的的文本放数组中,(默认已空格或者制表符分割),数组以下标0开始;

    1 root@ubuntu:/home/dyx/linux 21:33:04 90# read -a name
    2 nihao hhaha
    3 root@ubuntu:/home/dyx/linux 21:57:45 91# echo ${name[*]}
    4 nihao hhaha
    5 root@ubuntu:/home/dyx/linux 21:57:57 92# echo ${name[1]}
    6 hhaha

    -d:指定结束符,当输入中出现指定的结束符时,read命令将认为输入已经结束(默认为换行);

    -e:从标准输入读取中时,使用Readline库获取输入(此时用户可以使用退格键、方向箭头进行简单的行编辑操作);

    -n:指定读入的字符数n;

    -p:将该选项指定的字符串输出到标准错误,并读取输入;

    -r:将读取到的字符串字段放到不同的变量中;

    1 root@ubuntu:/home/dyx/linux 22:01:29 101# read -r v1 v2 v3
    2 nifds fds fff
    3 root@ubuntu:/home/dyx/linux 22:02:10 102# echo $v1
    4 nifds
    1 root@ubuntu:/home/dyx/linux 22:02:23 103# IFS="#";read -r v1 v2 v3 
    2 fdsfdsf fds #hshfhds#fdsf dsfs
    3 root@ubuntu:/home/dyx/linux 22:05:11 104# echo $v1
    4 fdsfdsf fds 
    5 root@ubuntu:/home/dyx/linux 22:05:17 105# echo $v2
    6 hshfhds

    最好有在修改IFS之前有,Old_IFS=$IFS, 之后再IFS=$Old_IFS

    -s:先锁住屏幕,让后再从标准输入中读入字符;

    -t:如果用户在指定的时间内没有输入,就结束读取状态;

    -u:从指定的文件描述中读取。

  • 相关阅读:
    我的Java学习推荐书目
    BTrace使用简介
    BTrace使用小结
    如何在生产环境使用Btrace进行调试
    BTrace : Java 线上问题排查神器
    淘宝Tprofiler工具实现分析
    JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码
    性能工具TProfiler介绍文档
    分布式系统理论基础
    微信小程序
  • 原文地址:https://www.cnblogs.com/yi-meng/p/3204384.html
Copyright © 2011-2022 走看看