sh/bash/dash/ksh/zsh等Shell脚本
-
5123
- 帖子: 11
- 注册时间: 2008-03-23 18:17
- 来自: 杭州
#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
不在终端输出,会快很多.
-
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,不知道有影响不?