solaris简单的bash脚本

时间:2013-08-10 06:07:34

标签: bash solaris

我正在尝试在solaris中执行这个简单的脚本。 我想对源目录中文件的文件名进行排序(数字化),并将文件逐个复制到另一个目录。并且,我想在复制每100个文件后打印一条消息。

#!/bin/bash

count=0

for i in `ls | sort -n`
do 
 cp $i ../target
 count = $((count+1))
 if[ $count%100 -eq 0 ] 
 then
    echo $count files copied
    sleep 1
 fi

done

这不起作用。我在网上搜索后尝试了不同的东西 我得到这样的错误 -

第8行的语法错误:'('意外。
第10行的语法错误:'然后'意外。
第13行的语法错误:'fi'意外等。

这个脚本有什么问题?

bash版本 - GNU bash,版本3.00.16(1)-release(sparc-sun-solaris2.10)

3 个答案:

答案 0 :(得分:2)

脚本的基本问题是间距。你有空间,你不应该有它们:

(wrong)  count = $((count+1))
(right)  count=$((count+1))
(better) ((count++))

并且您缺少需要它们的空间:

(wrong)  if[ $count%100 -eq 0 ]
(right)  if [ $((count % 100)) -eq 0 ]
(better) if ((count % 100 == 0))

count = $((count+1))尝试运行命令count,传递两个参数=count+1的值。 if[ ...尝试运行命令if[,因为[是有效的字符;它不会自动启动新令牌。

说了这么多,我对unexpected (错误消息感到困惑。您的bash可能太旧而无法识别$((语法吗?有可能。这是一个非常古老的狂欢。

答案 1 :(得分:0)

count=$((count+1))

if [ `echo $count % 100 | bc` -eq 0 ]

进行这些更正。

编辑:请尝试

count=`expr $count + 1`

答案 2 :(得分:0)

我在这里看到一些错误。首先,如果$i有特殊字符,则需要使用双引号。

其次,你不应该使用

for i in `ls | sort -n`

相反,请尝试以下

ls -1 | sort -n | while read i

第三,将你的if语句改为

if ((count%5 == 0))

((语法是bash,仅用于整数数学。

第四,将你的计数器增量改为

((count++))

这更简洁。此外,您的版本中的空间可能会破坏事物。请记住,空间很重要。