I’m currently writing a complicated Linux bash shell script where I need to keep a counter in an external file, and to do so, I need to be able to write to a file and then read from that file.
In short, this is how I write my counter to that file:
# create a variable to represent the filename COUNTER_FILE="counter.tmp" # write to the file echo "0" > $COUNTER_FILE
Later in the code I increment the counter and write it to the file like this:
((count++)) echo $count > $COUNTER_FILE
Finally, this is how I read the counter from the file:
count=`cat $COUNTER_FILE`
Related: Looping over lines in a file
In a related note, if you need to loop over the lines a file in a bash shell script, this for
loop works very well:
local filecount=1 IFS=$'\n' for i in `cat $FILES_FOUND` do if [ $filecount -eq $fileNumber ]; then filename=`echo $i | cut -d: -f1` exploreFile2 $filename fi (( filecount++ )) done
As you can see, I use another counter in this for
loop. I also use the input field separator variable IFS
to state that lines are separated by newline characters. You need to do this whenever the lines in the file you’re reading contain blank spaces, which mine do. (In this code, the variable FILES_FOUND
contains a list of filenames which I found earlier in my script, and those filenames can contain spaces.)
The end
If you need to see how to read from a file and write to a file in a Linux bash shell script, I hope this has been helpful.