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:从指定的文件描述中读取。

  • 相关阅读:
    (转+原)python中的浅拷贝和深拷贝
    (原)torch7中添加新的层
    (原+转)ubuntu终端输出彩色文字
    (原)torch中显示nn.Sequential()网络的详细情况
    (原)python中使用plt.show()时显示图像
    eclipse 注释模板
    leetcode 11 最大盛水容器
    leetcode 9 回文数字
    leetcode8 字符串转整数
    利用Intent启动activity的例子
  • 原文地址:https://www.cnblogs.com/yi-meng/p/3204384.html
Copyright © 2011-2022 走看看