Chinaunix首页 | 论坛 | 博客
  • 博客访问: 49407
  • 博文数量: 10
  • 博客积分: 1480
  • 博客等级: 上尉
  • 技术积分: 115
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-11 17:31
文章分类
文章存档

2010年(10)

我的朋友

分类:

2010-04-11 21:11:54

一.  read读取单个词.
 
     $read name
     $tony ma
     $echo $name
     tony ma

     $read id passwd
     $allen passwd
     $echo $id
     $allen
     $echo $passwd
     $passwd

     $read id passwd
     $allen kaka gogo
     $echo $id
     $allen
     $echo $passwd
     $kaka gogo
 
二.  read读取整行.
 
     利用while循环来使read读取整行。
 
     以下是代码清单:
 
     1  #!/bin/bash
     2  lineno=1
     3  cat $* |
     4  while read -r line
     5  do
     6          echo "$lineno: $line"
     7          lineno=$((lineno + 1))
     8  done
 
三.   read的嵌套.
 
 
     1)while外层的read依次读取的是文件pbook中的每一行,而内层的read是从console读取的内容。
 
     2)要实现while read的嵌套,可以使用exec命令,将I/O重定向。
        注意exec的用法,以及括号的使用。
 
 
     1  #!/bin/bash
     2  echo -n "Enter name to be removed: "
     3  read name
     4  p=$(grep "$name " phonebook | wc -l)
     5  echo $p
     6  if [ "$p" -gt 1 ]
     7  then
     8          echo "More than one match ; Please select the one to remove;"
     9          grep  "$name " phonebook > pbook
    10          cat pbook | while read line
    11          do(
    12                echo -n  "$line  Remove(y/n)?"
    13                exec < /dev/tty
    14                read answer
    15                if [ "$answer" = y ]
    16                then
    17                          grep -v "^$line$" phonebook > /tmp/phonebook.tmp
    18                          mv /tmp/phonebook.tmp phonebook
    19                else
    20                          continue
    21                fi
    22             )
    23          done
    24  else
    25          grep -v "^$line$" phonebook > /tmp/phonebook.tmp
    26          mv /tmp/phonebook.tmp phonebook
    27  fi
    28  cat phonebook
 
 
 
四.  用read读取一行中的多个字段:
 
   
   

[root@localhost lk]# ls -l| grep b.txt

 -rw-r--r-- 1 root root 5435 Apr 20 10:59 b.txt

[root@localhost lk]# ls -l| grep c.txt

-rw-r--r-- 1 root root 3397 Apr 20 11:00 c.txt

 [root@localhost lk]# ls -l| grep d.txt

-rw-r--r-- 1 root root 1673 Apr 20 11:01 d.txt

 [root@localhost lk]# cat a.test

 b.txt 5435

 c.txt 3397

 d.txt 1600

[root@localhost lk]# cat size_1.sh

 #cat a.test |

while read filename size

do

        real_size=$(ls -l $filename | awk '{print $5}')

        if [ "$real_size" -eq "$size" ]

        then

              mv $filename /home/liukang

        else

              echo "($filename)'s size is not equal."

        fi

done < a.test

[root@localhost lk]#


文件a.test中的每一行都含有两个字段,分别是文件名(filename)和文件大小(size)。

先用while  read来分别读取每一行,再读取每一行的每一个字段。

 

 

阅读(10525) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~