LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 760|回复: 7

怎样批量改号

[复制链接]
发表于 2004-7-23 12:50:44 | 显示全部楼层 |阅读模式
怎样批量改号

有test1到 test100 文件,想改成 test5到test105
发表于 2004-7-23 13:39:10 | 显示全部楼层

  1. for i in $(seq 1 100); do mv test.$i test.$((i+4));done
复制代码

1到100是100个文件, 5到105可是101个文件. 上面这个只能mv从5到104.
发表于 2004-7-23 13:44:25 | 显示全部楼层
还有一点, 要先mkdir一个dir, 然后再mv, 不然就覆盖了.
for i in $(seq 1 100); do mv test.$i test/test.$((i+4));done
发表于 2004-7-23 15:41:04 | 显示全部楼层
  1. $ i=100;while [ $i -gt 0 ];do mv test$i test$((i+5));i=`expr $i - 1`;done
复制代码

也可以。
另外问一句:
$((i+4))中,$()不是相当于``吗?那么(i+4)怎么能够等于expr $i + 4呢?
发表于 2004-7-23 15:43:32 | 显示全部楼层
最初由 aaccdd 发表
  1. $ i=100;while [ $i -gt 0 ];do mv test$i test$((i+5));i=`expr $i - 1`;done
复制代码

也可以。
另外问一句:
$((i+4))中,$()不是相当于``吗?那么(i+4)怎么能够等于expr $i + 4呢?

$((...))用于计算
$(...)用于变量替换
发表于 2004-7-23 15:50:57 | 显示全部楼层
明白了,
shell把$(( ...))之内的表达式解释为算数表达式,
并且表达式中的变量不需要用$引导,
使用$也不算错。
发表于 2004-7-23 15:56:40 | 显示全部楼层
$(())中可以使用$()的
/home/lee#a=333
/home/lee#b=444
/home/lee#echo $(($a+$b))
777
/home/lee#echo $(($((a+b))*$((b-a))))
86247
/home/lee#echo $(($(date +%M)+1))
2
/home/lee#echo $(echo $((a+b)))
777

他们可以互相嵌套使用的
发表于 2004-7-23 15:58:59 | 显示全部楼层
领教了,
原来可以嵌套。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表