bash的bug?

sh/bash/dash/ksh/zsh等Shell脚本
回复
fnan
帖子: 919
注册时间: 2009-07-01 22:04
送出感谢: 0
接收感谢: 13 次

bash的bug?

#1

帖子 fnan » 2011-03-10 22:12

代码: 全选

#!/bin/bash

#echo -n '输入要创建的文本名:'
#read v_file_name
echo -n '输入需要的行数:'
read v_number_line
for i in $(seq $v_number_line);do
	for ia in $(seq 80);do
		a=$(($RANDOM%92+35))
		if [[ $a -lt 40  ]];then #  允许 * + , 字符。
			a=" "
		else
			a=$(echo "obase=8;$a" |bc)
			a='\'0$a
			a=$(echo -e "$a")
		fi
		c=$c$a
	done
echo -n "$i> 字节数: "
echo ${#c}
echo $c
c=
done
会有无法解释的现象:
124> 字节数: 80
Qx;U@wiD^V oFeZ|p6mt>Zc{hLuy1dr[s-(TZPM]Ttx23g`><</K<Ac25O+IS;K{aR^*M:l hjgH2s=x
125> 字节数: 80
Lr@wz`I0XU }EC/JLosmbW{4^eeB- I{Ju,V]tWGhKVO:Wg1c9 gWU ys~~f,<~|32MOZ)M+1dRAvDm9
126> 字节数: 80
[q,R0V-J0 0010_01_00000091_1100_0_2010_03_07_06_06_58_new.txt 0010_01_00000091_1100_1_2010_03_07_09_06_58_new.txt 0010_01_00000091_1100_1_2010_03_07_10_06_58_new.txt 1.txt abs.txt cj随机词文本.sh Desktop Documents Downloads examples.desktop hello hello2 hello2.c hello3 hello3.c hello.c iedict.iso me Music mye n Pictures pr.sh Public r2 rb.sh rs.sh shell字体颜色 Templates Videos VirtualBox VMs 安装postgresql iiz9]a\4p6ZA4^B}zo`P)p0Hy6zi>>q-EPCRT3,CRv C{Rp 1k_e.|n=yNS5F5.HNv(v
127> 字节数: 80
I Im_mMZ?>]8>}/uY[=fzg<zo*P<RuYr|ESSxac~y0?2RVQ-QBfeFmrKb xZ+}BM_O~aOsuP-w`jK;X`
128> 字节数: 80
N{ 0i1oKZgn1|Ee ^PQ (U@iIAuKp122VzhYm*BDJ i5Z5P )3f1z~vq7AH+iB[}4u9PJ{zA<o]l^mGR

***************注意第 126 行*************** 发疯了!****************************

如果把这句代码 if [[ $a -lt 40 ]];then # 允许 * + , 字符。
改为 if [[ $a -lt 40 || ($a -gt 41 && $a -lt 44) ]];then # 即不允许 * + , 字符。
输出就会正常!

非常严重,因为代码完全没有错误, 查疯了也找不到毛病。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

Re: bash的bug?

#2

帖子 BigSnake.NET » 2011-03-10 22:26

不小心输出了控制字符了吧 =。=
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
fnan
帖子: 919
注册时间: 2009-07-01 22:04
送出感谢: 0
接收感谢: 13 次

Re: bash的bug?

#3

帖子 fnan » 2011-03-10 23:30

BigSnake.NET 写了:不小心输出了控制字符了吧 =。=
哪为何禁止* + ,三个字符就无事?
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
fnan
帖子: 919
注册时间: 2009-07-01 22:04
送出感谢: 0
接收感谢: 13 次

Re: bash的bug?

#4

帖子 fnan » 2011-03-10 23:34

那些乱输出的显然是/dev/random里的随机源,如何连到哪里去了?

把 c=$c$a 改成 c=$c-$a 可以看到正确的字符输出, 证明问题在最后的echo 上,与$RANDOM无关。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
fnan
帖子: 919
注册时间: 2009-07-01 22:04
送出感谢: 0
接收感谢: 13 次

Re: bash的bug?

#5

帖子 fnan » 2011-03-11 5:26

借用awk的print输出,看到有特殊字符,但不会发疯, 用awk好了。

代码: 全选

#!/bin/bash

echo -n '输入要创建的文本名:'
read v_file_name
echo -n '输入需要的行数:'
read v_number_line
for i in $(seq $v_number_line);do
	for ia in $(seq 80);do
		a=$(($RANDOM%92+35))
		if [[ $a -lt 40 ]];then
			a=" "
		else
			a=$(echo "obase=8;$a" |bc)
			a='\'0$a
			a=$(echo -e "$a")
		fi
		c=$c$a
	done
echo -n "$i> 字节数: "
echo ${#c}
cat /dev/null |awk 'END{print e}' e="$c" >> $v_file_name
c=
done
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45
送出感谢: 0
接收感谢: 9 次

Re: bash的bug?

#6

帖子 fanhe » 2011-03-11 22:08

不知道楼主目的是啥
变量全部用双引号引上试试
fnan
帖子: 919
注册时间: 2009-07-01 22:04
送出感谢: 0
接收感谢: 13 次

Re: bash的bug?

#7

帖子 fnan » 2011-03-12 0:11

fanhe 写了:不知道楼主目的是啥
变量全部用双引号引上试试
试过了, 一律无效。
(有时需要超大随机字符文件测试命令效率,比如十万行的, 不成自己一行一行写?)
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
lilydjwg
论坛版主
帖子: 4165
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: bash的bug?

#8

帖子 lilydjwg » 2011-03-14 12:46

fnan 写了:
BigSnake.NET 写了:不小心输出了控制字符了吧 =。=
哪为何禁止* + ,三个字符就无事?
* 被扩展了?
头像
lilydjwg
论坛版主
帖子: 4165
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: bash的bug?

#9

帖子 lilydjwg » 2011-03-14 12:47

fnan 写了: (有时需要超大随机字符文件测试命令效率,比如十万行的, 不成自己一行一行写?)

代码: 全选

head -n100000 /dev/urandom > randomfile
fnan
帖子: 919
注册时间: 2009-07-01 22:04
送出感谢: 0
接收感谢: 13 次

Re: bash的bug?

#10

帖子 fnan » 2011-03-14 20:26

head -n100000 /dev/urandom > randomfile
不行,长度要有限制, 要有空格, 不能有带问号的和带四个小格的特殊字符
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
lilydjwg
论坛版主
帖子: 4165
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: bash的bug?

#11

帖子 lilydjwg » 2011-03-14 22:04

fnan 写了:
head -n100000 /dev/urandom > randomfile
不行,长度要有限制, 要有空格, 不能有带问号的和带四个小格的特殊字符
带四个小格的特殊字符 是什么?
fnan
帖子: 919
注册时间: 2009-07-01 22:04
送出感谢: 0
接收感谢: 13 次

Re: bash的bug?

#12

帖子 fnan » 2011-03-14 23:06

带四个小格的特殊字符 是什么?
��v��֘�t�Nf�
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
lilydjwg
论坛版主
帖子: 4165
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: bash的bug?

#13

帖子 lilydjwg » 2011-03-14 23:09

fnan 写了:
带四个小格的特殊字符 是什么?
��v��֘�t�Nf�
这个是无效的编码啦。。

话说,你为什么不用 Python/Perl/Ruby/etc 弄呢?这些语言比 shell 好弄得多。
fnan
帖子: 919
注册时间: 2009-07-01 22:04
送出感谢: 0
接收感谢: 13 次

Re: bash的bug?

#14

帖子 fnan » 2011-03-15 2:03

折腾bash时间,不管别的。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
回复

回到 “Shell脚本”