初学shell碰到两个问题,求助高手

sh/bash/dash/ksh/zsh等Shell脚本
回复
5123
帖子: 11
注册时间: 2008-03-23 18:17
来自: 杭州

初学shell碰到两个问题,求助高手

#1

帖子 5123 » 2008-04-01 18:17

问题一:
用以下程序输出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文件是三行内容是
一二三四五
四三二一
三二

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

而不是我想得到的"一二三四五 四三二一 三二"
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#2

帖子 eexpress » 2008-04-01 21:46

"一二三四五 四三二一 三二"
tr '\n' '\ '
取出它最后一行的内容放入变量中
a=`tail -n 1 number.dic`
第一个问题,说明下要干什么,可能更容易想方法。
● 鸣学
5123
帖子: 11
注册时间: 2008-03-23 18:17
来自: 杭州

#3

帖子 5123 » 2008-04-01 22:57

谢谢楼上的朋友,不过还有一个很麻烦的问题在于假设我用
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输出的最后一行有问题
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#4

帖子 eexpress » 2008-04-01 23:25

☎ aaaa=`tail -n 1 tmp`; echo $aaaa; bsss="passwords"; if [ $aaaa = $bsss ]; then echo yes; fi
passwords
yes
● 鸣学
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#5

帖子 bones7456 » 2008-04-02 9:17

第一个问题,改成
echo $i >> number.dic
不在终端输出,会快很多.
关注我的blog: ε==3
5123
帖子: 11
注册时间: 2008-03-23 18:17
来自: 杭州

#6

帖子 5123 » 2008-04-02 11:02

感谢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 ]
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#7

帖子 eexpress » 2008-04-03 8:56

☎ sh -x test
+ tail -n 1 temp
+ aaaa=passwords
+ echo passwords
passwords
+ bsss=passwords
+ [ passwords = passwords ]
+ echo yes
yes
☎ cat temp
passwords

你的有点奇怪了哦
● 鸣学
5123
帖子: 11
注册时间: 2008-03-23 18:17
来自: 杭州

--

#8

帖子 5123 » 2008-04-03 22:30

完全不理解了:(
我是7.10,不知道有影响不?
回复