Karthi Pk
Karthi Pk

Reputation: 3

solaris simple bash script

I'm trying to execute this simple script in solaris. I want to sort(numeric) the filenames of the files in source directory and copy the file one by one to another directory. And, I want to print a message after copying every 100 files.

#!/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

this is not working. I tried different things after searching in net.
I get errors like these -

syntax error at line 8: '(' unexpected.
syntax error at line 10: 'then' unexpected.
syntax error at line 13: 'fi' unexpected etc.

What is the problem with this script?

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

Upvotes: 0

Views: 5696

Answers (3)

Sakthi Kumar
Sakthi Kumar

Reputation: 3045

count=$((count+1))

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

Make these corrections.

Edit: Please try

count=`expr $count + 1`

Upvotes: 0

rici
rici

Reputation: 241691

The basic problem with the script is spacing. You have spaces where you shouldn't have them:

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

and you're missing spaces where you need them:

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

count = $((count+1)) tries to run the command count passing it two arguments, = and the value of count+1. if[ ... tries to run the command if[ because [ is a valid word character; it doesn't automatically start a new token.

Having said all that, I'm puzzled by the unexpected ( error message. Could your bash be too old to recognize $(( syntax? Possibly. It's a very old bash.

Upvotes: 2

idfah
idfah

Reputation: 1438

I see a few errors here. First, you need double quotes around $i in case they have special characters.

Second, you shouldn't ever use

for i in `ls | sort -n`

Instead, try the following

ls -1 | sort -n | while read i

Third, change your if statement to

if ((count%5 == 0))

The (( syntax is bash is made just for integer math.

Fourth, change your counter increment to

((count++))

This is more concise. Also, the space in your version may break things. Remember, spaces matter.

Upvotes: 0

Related Questions