BBS.ChinaUnix.net
今日推荐    首页 | 新闻 | Linux | AIX | 博客 | 论坛 | 存储 | 人才 | 培训 | 知识库 | 资料 | 读书 | 手册 | 精华 | 下载 | 空间     
  会员: 密码: 免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 


不知道问题出在哪里了!请各位朋友帮忙分析!
首页 » 论坛 » Shell »  
[打印] [订阅] [收藏] [推荐给朋友] [本帖文本页]
super_ebo
圣骑士




UID:639994
注册:2007-11-10
最后登录: 2008-06-07
帖子:86
精华:0

可用积分:81
信誉积分:0
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
1楼 发表于 2008-5-16 23:08 
#!/bin/bash

count=0
id=0

while read line
do       
((count++))       
done < /etc/passwd


IFS=:


/*----------------------------------------------------------
while read name ps uid gid date dir sh
do
      
          if [ $name = "super" ]         ----------------可与正确运行,并且有结果,只有一行,那既是名字为super的一行
          then
               echo hi         $name   -----------hi super
         fi       
done </etc/passwd
--------------------------------------------*/


以上程序,执行没有问题,结果为hi super
但是,我把/*————————  到 ——————————*/这段,换作下面这段,就会不能正确运行,有错误


/**************************************************************
while read name ps uid gid date dir sh
do
        if [ $id < $count ]  -----------------------不可以正确运行
        then
             
                  echo -e "$name                $uid                $gid                $dir\n">>$1
               ((id++))         
        else
                   break  
        fi       
done </etc/passwd
*****************************************************************/




我想问,为什么/*————————  到 ——————————*/这段,我同样读了name,可我也做了$name="super"这样的比较,
而换作了/****** 到 *******/这段, 我使用两个变量作比较,为什么就不行了。

而且,我又try了,这一段

while read name ps uid gid date dir sh
do
        if [ $id < $count ]  -----------------------不可以正确运行
        then
           echo hi  
             ((id++))         
        else
                   break  
        fi       
done </etc/passwd


也不能够正确运行!!!


我怀疑问题出在了
while read name ps uid gid date dir sh
do

done</etc/passwd
上面了!



请各位帮忙看看!一头雾水阿!!谢谢!



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
寂寞烈火   帅哥
老法王


CU奥运火炬传递手2008
荣誉会员  
UID:187152
注册:2004-10-1
最后登录: 2008-07-04
帖子:23139
精华:5

可用积分:4407
信誉积分:110
专家积分:72 (本版)

来自:北京海淀
状态:...在线...

[个人空间] [短信] [博客]


顶部
2楼 发表于 2008-5-16 23:18 
干脆说你要干嘛吧



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

          ~\____/\../\      /\../\____/~
             { ___(pq)     (pq)____}
            RedHat Gnu/Linux 9
GNU{Bash3.2.0 Grep2.5.1 Sed4.05 Awk3.1.1}

我宠我爱狗友会
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
super_ebo
圣骑士




UID:639994
注册:2007-11-10
最后登录: 2008-06-07
帖子:86
精华:0

可用积分:81
信誉积分:0
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
3楼 发表于 2008-5-16 23:39 
就是想把/etc/paswd的东西读出来 用IFS=:分解
之后,把usernane , uid,gid, home dir
存到一个新的文件中



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
寂寞烈火   帅哥
老法王


CU奥运火炬传递手2008
荣誉会员  
UID:187152
注册:2004-10-1
最后登录: 2008-07-04
帖子:23139
精华:5

可用积分:4407
信誉积分:110
专家积分:72 (本版)

来自:北京海淀
状态:...在线...

[个人空间] [短信] [博客]


顶部
4楼 发表于 2008-5-16 23:42 


QUOTE:
原帖由 super_ebo 于 2008-5-16 23:39 发表
就是想把/etc/paswd的东西读出来 用IFS=:分解
之后,把usernane , uid,gid, home dir
存到一个新的文件中

这样不可以么
cut -f1,3,4,6 -d":" /etc/passwd >newfile



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

          ~\____/\../\      /\../\____/~
             { ___(pq)     (pq)____}
            RedHat Gnu/Linux 9
GNU{Bash3.2.0 Grep2.5.1 Sed4.05 Awk3.1.1}

我宠我爱狗友会
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
super_ebo
圣骑士




UID:639994
注册:2007-11-10
最后登录: 2008-06-07
帖子:86
精华:0

可用积分:81
信誉积分:0
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
5楼 发表于 2008-5-16 23:49 
可以,但是我主要是想学习一下IFS的作用!
所以用IFS=:    ,用来分解以下/etc/passwd
于是,就出现了我的问题!



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
super_ebo
圣骑士




UID:639994
注册:2007-11-10
最后登录: 2008-06-07
帖子:86
精华:0

可用积分:81
信誉积分:0
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
6楼 发表于 2008-5-17 00:02 
回复 #4 寂寞烈火 的帖子

请前辈指点!



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
寂寞烈火   帅哥
老法王


CU奥运火炬传递手2008
荣誉会员  
UID:187152
注册:2004-10-1
最后登录: 2008-07-04
帖子:23139
精华:5

可用积分:4407
信誉积分:110
专家积分:72 (本版)

来自:北京海淀
状态:...在线...

[个人空间] [短信] [博客]


顶部
7楼 发表于 2008-5-17 00:14 


QUOTE:
原帖由 super_ebo 于 2008-5-16 23:49 发表
可以,但是我主要是想学习一下IFS的作用!
所以用IFS=:    ,用来分解以下/etc/passwd
于是,就出现了我的问题!

ifs=$IFS
while read line;do set -- $line;echo $1 $3 $4 $6;done</etc/passwd
IFS=$ifs



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

          ~\____/\../\      /\../\____/~
             { ___(pq)     (pq)____}
            RedHat Gnu/Linux 9
GNU{Bash3.2.0 Grep2.5.1 Sed4.05 Awk3.1.1}

我宠我爱狗友会
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
super_ebo
圣骑士




UID:639994
注册:2007-11-10
最后登录: 2008-06-07
帖子:86
精华:0

可用积分:81
信誉积分:0
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
8楼 发表于 2008-5-17 00:50 
我就想读/etc/passwd的前10行!
是不是要在while read line
之中加入if呢?

我做了如下实验
id=0
IFS=:
while read name ps uid gid dir sh
do
    if [ $id < 10 ]
   then
      echo $name   $uid $gid $dir
   else
      break
   fi
done

结果,错误!!!



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
寂寞烈火   帅哥
老法王


CU奥运火炬传递手2008
荣誉会员  
UID:187152
注册:2004-10-1
最后登录: 2008-07-04
帖子:23139
精华:5

可用积分:4407
信誉积分:110
专家积分:72 (本版)

来自:北京海淀
状态:...在线...

[个人空间] [短信] [博客]


顶部
9楼 发表于 2008-5-17 01:25 


QUOTE:
原帖由 super_ebo 于 2008-5-17 00:50 发表
我就想读/etc/passwd的前10行!
是不是要在while read line
之中加入if呢?

我做了如下实验
id=0
IFS=:
while read name ps uid gid dir sh
do
    if [ $id < 10 ]
   then
      echo $name   $u ...



awk -F: 'NR<11'

非要你那样的话

ifs=$IFS
IFS=:
while read line;do
((++count))
set -- $line
#echo $1 $3 $4 $6
((count>=10))&&break # if [[ $count >= 10 ]];then break;fi
done</etc/passwd
IFS=$ifs

[ 本帖最后由 寂寞烈火 于 2008-5-17 01:34 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

          ~\____/\../\      /\../\____/~
             { ___(pq)     (pq)____}
            RedHat Gnu/Linux 9
GNU{Bash3.2.0 Grep2.5.1 Sed4.05 Awk3.1.1}

我宠我爱狗友会
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布
super_ebo
圣骑士




UID:639994
注册:2007-11-10
最后登录: 2008-06-07
帖子:86
精华:0

可用积分:81
信誉积分:0
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
10楼 发表于 2008-5-17 11:24 
回复 #9 寂寞烈火 的帖子

十分感谢  寂寞烈火 的帮助,和耐心的解答!


请问,set --什么意思?:)

谢谢!

[ 本帖最后由 super_ebo 于 2008-5-17 11:50 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布

首页 » 论坛 » Shell »


 


Copyright © 2001-2008 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP

Processed in 0.042607 second(s), 4 queries , Gzip enabled