当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 初学shell碰到两个问题,求助高手
帖子发表于 : 2008-04-01 18:17 

注册: 2008-03-23 18:17
帖子: 11
地址: 杭州
送出感谢: 0 次
接收感谢: 0 次
问题一:
用以下程序输出1到999999到文件中,但是执行的效率很低,全部算完需要花很多的时间,有没有其它的实现方法
代码:
# !/bin/sh
i=1
while  [ $i -le 999999 ] ;  do
   echo $i | tee -a number.dic
   i=$(($i+1))
done
echo "finish"


问题二:
假定有一个文件abc.txt,现在取出它最后一行的内容放入变量中,但此时将该变量echo出来的话,光标不是在变量的末端,而是在前头,这时会出现一些问题。可能讲起来不是很清楚,看看程序就知道了。
代码:
# !/bin/sh
rm try.txt
#获得文件的总行数
dic="number.dic"
line_all=`cat $dic |wc -l`
try1=`cat $dic |sed -n ${i}p`
i=$(($i+1))
try2=`cat $dic |sed -n ${i}p`
i=$(($i+1))
try3=`cat $dic |sed -n ${i}p`
echo "正在探测$try1 $try2 $try3"


假定number.dic文件是三行内容是
一二三四五
四三二一
三二

那么程序运行后的结果是
"三二二一五"

而不是我想得到的"一二三四五 四三二一 三二"


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-04-01 21:46 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
引用:
"一二三四五 四三二一 三二"
tr '\n' '\ '
引用:
取出它最后一行的内容放入变量中
a=`tail -n 1 number.dic`
第一个问题,说明下要干什么,可能更容易想方法。


_________________
● 鸣学


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-04-01 22:57 

注册: 2008-03-23 18:17
帖子: 11
地址: 杭州
送出感谢: 0 次
接收感谢: 0 次
谢谢楼上的朋友,不过还有一个很麻烦的问题在于假设我用
a=`tail -n 1 number.dic`
来得到末行的数据,当我
echo $a
的时候,数据是正确的
但当我将$a写入if语句时,从sh -x filename中发现if 中的$a为空,没有办法正确提取末行数据。以下是我的程序及sh -x filename的内容:
target=`cat temp | awk -F\ '{print $3}'`
target=`echo "$target"`
real="passwords"
echo $target
echo $real
if [ $target = $real ]; then…………

+ echo passwords
passwords
+ echo passwords
passwords
= passwords ]
可以看出-x输出的最后一行有问题


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-04-01 23:25 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
☎ aaaa=`tail -n 1 tmp`; echo $aaaa; bsss="passwords"; if [ $aaaa = $bsss ]; then echo yes; fi
passwords
yes


_________________
● 鸣学


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-04-02 9:17 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
第一个问题,改成
echo $i >> number.dic
不在终端输出,会快很多.


_________________
关注我的blog: ε==3


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-04-02 11:02 

注册: 2008-03-23 18:17
帖子: 11
地址: 杭州
送出感谢: 0 次
接收感谢: 0 次
感谢bones还有eexpress的热心帮助,不过刚刚试了eexpress4楼的办法,结果还是不行,反馈如下,可以看出echo是对的,不过到了if就出问题,程序如下
代码:
# !/bin/sh
aaaa=`tail -n 1 temp`; echo $aaaa; bsss="passwords"; if [ $aaaa = $bsss ]; then echo yes; fi

temp文件就一行,手动写入passwords

caviar@caviar-desktop:~/Crack$ cat temp
passwords
caviar@caviar-desktop:~/Crack$ sh -x test
+ tail -n 1 temp
+ aaaa=passwords
+ echo passwords
passwords
+ bsss=passwords
= passwords ]


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-04-03 8:56 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
☎ sh -x test
+ tail -n 1 temp
+ aaaa=passwords
+ echo passwords
passwords
+ bsss=passwords
+ [ passwords = passwords ]
+ echo yes
yes
☎ cat temp
passwords

你的有点奇怪了哦


_________________
● 鸣学


页首
 用户资料  
 
8 楼 
 文章标题 : --
帖子发表于 : 2008-04-03 22:30 

注册: 2008-03-23 18:17
帖子: 11
地址: 杭州
送出感谢: 0 次
接收感谢: 0 次
完全不理解了:(
我是7.10,不知道有影响不?


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译