免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3090 | 回复: 13
打印 上一主题 下一主题

有没有什么方法实现我的shell [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-15 16:37 |只看该作者 |倒序浏览
for i in a b c d e f g h i j k l m n o p q r s t u v w x y z
do
echo $i
done


for i in a b c d e f g h i j k l m n o p q r s t u v w x y z
do
for j in a b c d e f g h i j k l m n o p q r s t u v w x y z
do
echo $i$j
done
done


for i in a b c d e f g h i j k l m n o p q r s t u v w x y z
do
for j in a b c d e f g h i j k l m n o p q r s t u v w x y z
do
for k in a b c d e f g h i j k l m n o p q r s t u v w x y z
do
echo $i$j$k
done
done
done

现在我想写个shell可以让我传参数进去,比如执行
./generate.sh 2
时,输出
aa
ab
ac
...
zz

当传入参数为3时,执行
./generate.sh 3
输出
aaa
bbb
ccc
...
zzz

想问问各位有何建议!不胜感激

论坛徽章:
0
2 [报告]
发表于 2010-01-15 16:50 |只看该作者
#!/bin/sh
for((i=0;i<$1;i++))
do
    a=$a"{a..z}"
done
eval echo $a

论坛徽章:
0
3 [报告]
发表于 2010-01-15 16:58 |只看该作者
能不能解释一下最后eval echo $a意思??看不明白

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2010-01-15 17:03 |只看该作者
root@yeah ~
$ cat a.sh
#!/bash
a=({a..z})
for i in ${a[@]};do
n=0
while((n<$1));do
echo  -n $i
((n++))
done
echo
done

root@yeah ~
$ sh a.sh 4
aaaa
bbbb
cccc
dddd
eeee
ffff
gggg
hhhh
iiii
jjjj
kkkk
llll
mmmm
nnnn
oooo
pppp
qqqq
rrrr
ssss
tttt
uuuu
vvvv
wwww
xxxx
yyyy
zzzz

root@yeah ~
$

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2010-01-15 17:20 |只看该作者
原帖由 sunbw001 于 2010-1-15 16:50 发表
#!/bin/sh
for((i=0;i

没测试吧?

论坛徽章:
0
6 [报告]
发表于 2010-01-15 17:20 |只看该作者
不对吧
参数是2时,应该进行26*26=676次echo
参数是3时,应该进行26*26*26=17576次echo
....

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2010-01-15 17:37 |只看该作者
思路:嵌套循环,判断字符串是z{n}的话就跳出循环。

论坛徽章:
0
8 [报告]
发表于 2010-01-15 17:43 |只看该作者
想不出这种嵌套循环的替代写法,期待中

我的思路是曲线救国,生成脚本,参数4就生成4层嵌套的脚本,最后再执行它

[ 本帖最后由 ywlscpl 于 2010-1-15 17:45 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2010-01-15 18:13 |只看该作者
办法比较笨- -,但能实现
#!/bin/bash
case $1 in
1)
for i in a b c d e f g h i j k l m n o p q r s t u v w x y z
do
echo $i
done
;;
2)
for i in a b c d e f g h i j k l m n o p q r s t u v w x y z
do
for j in a b c d e f g h i j k l m n o p q r s t u v w x y z
do
echo $i$j
done
done
;;
3)
for i in a b c d e f g h i j k l m n o p q r s t u v w x y z
do
for j in a b c d e f g h i j k l m n o p q r s t u v w x y z
do
for k in a b c d e f g h i j k l m n o p q r s t u v w x y z
do
echo $i$j$k
done
done
done
;;
*)
echo erro
esac

论坛徽章:
0
10 [报告]
发表于 2010-01-15 18:32 |只看该作者
按照8楼思路写的,测试通过
  1. #!/bin/bash
  2. [ $# -eq 1 ] || exit 1
  3. >/tmp/t.sh

  4. for ((i=1;i<=$1;i++))
  5. do
  6.   echo -e "for i$i in {a..z}\ndo"  >>/tmp/t.sh
  7. done

  8. printf "echo " >>/tmp/t.sh
  9. for ((i=1;i<=$1;i++))
  10. do
  11.   printf \$i$i >>/tmp/t.sh
  12. done
  13. echo >>/tmp/t.sh

  14. for ((i=1;i<=$1;i++))
  15. do
  16.   echo done  >>/tmp/t.sh
  17. done

  18. sh /tmp/t.sh
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP