免费注册 查看新帖 |

Chinaunix

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

[数值计算] 无法正确循环,是脚本语句写的不对? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-26 11:13 |只看该作者 |倒序浏览
这是小弟的脚本:

#!/bin/bash
echo "please input a number:"
read num
user_prefix=student
for a in {01..$num};do
echo ${user_prefix}$a
done

执行结果-------------------------------------------------

[root@server02 binzai]# sh -x u.sh
+ echo 'please input a number:'
please in put a number:
+ read num
12
+ user_prefix=student
+ for a in '{01..$num}'
+ echo 'student{01..12}'
student{01..12}

小弟想要的结果是,当输入12,输出的结果为
01
02
03
04
...
12

个人的看法是:shell不能有效判断$num,输入的是一个有效数字

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
2 [报告]
发表于 2015-05-26 11:20 |只看该作者
  1. #! /bin/bash
  2. echo "please input a number:"
  3. read num
  4. user_prefix=student
  5. for a in $(seq 1 $num);do
  6. printf "%s%02d\n" $user_prefix $a
  7. done
复制代码
回复 1# byrand1984


   

论坛徽章:
0
3 [报告]
发表于 2015-05-26 11:28 |只看该作者
回复 1# byrand1984

shell中没有序列的概念,所以{01...12}不是01、02...12.


   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
4 [报告]
发表于 2015-05-26 11:34 |只看该作者
回复 1# byrand1984

$ num=12; user_prefix=student; eval echo $user_prefix{01..$num}
student01 student02 student03 student04 student05 student06 student07 student08 student09 student10 student11 student12

   

论坛徽章:
0
5 [报告]
发表于 2015-05-26 12:09 |只看该作者
回复 2# bikkuri

谢谢大哥,这个是可以的.


   

论坛徽章:
0
6 [报告]
发表于 2015-05-26 12:11 |只看该作者
coolmoon_133319 发表于 2015-05-26 11:28
回复 1# byrand1984

shell中没有序列的概念,所以{01...12}不是01、02...12.


for a in {01..12},会输出01 02 03 04....的,
如果 for a in {01..$num},如果是用一个变量,它就不能输出01 02 03 ...

论坛徽章:
0
7 [报告]
发表于 2015-05-26 12:17 |只看该作者
jason680 发表于 2015-05-26 11:34
回复 1# byrand1984

$ num=12; user_prefix=student; eval echo $user_prefix{01..$num}


谢谢大哥,你的语句很不错,见到了一个新命令eval,感谢
有没有办法让echo输出的结果:第一行是student01
第二行是student02
...

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
8 [报告]
发表于 2015-05-26 14:50 |只看该作者
  1. #!/bin/bash
  2. echo "please input a number:"
  3. read num
  4. user_prefix=student
  5. for((a=1;a<=$num;a++)); do
  6.     b=10$a
  7.     echo ${user_prefix}${b:(-2)}
  8. done
复制代码

论坛徽章:
11
射手座
日期:2015-08-11 16:10:26辰龙
日期:2015-08-11 16:11:11黑曼巴
日期:2016-04-26 16:58:40
9 [报告]
发表于 2015-05-26 16:08 |只看该作者
本帖最后由 hjfeng1988 于 2015-05-26 16:08 编辑
Shell_HAT 发表于 2015-05-26 14:50
  1. ${b:(-2)}这么写都认不出来了
  2. ${b:0-2}
复制代码

论坛徽章:
0
10 [报告]
发表于 2015-05-26 16:35 |只看该作者
hjfeng1988 发表于 2015-05-26 16:08


还是CU高手多,
这个技巧用的巧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP