42 lines
1.2 KiB
Bash
42 lines
1.2 KiB
Bash
#!/bin/bash
|
|
# Simple line count example, using bash
|
|
#
|
|
# Bash tutorial: http://linuxconfig.org/Bash_scripting_Tutorial#8-2-read-file-into-bash-array
|
|
# My scripting link: http://www.macs.hw.ac.uk/~hwloidl/docs/index.html#scripting
|
|
#
|
|
# Usage: ./line_count.sh file
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Link filedescriptor 10 with stdin
|
|
exec 10<&0
|
|
# stdin replaced with a file supplied as a first argument
|
|
exec < $1
|
|
# remember the name of the input file
|
|
in=$1
|
|
|
|
# init
|
|
file="current_line.txt"
|
|
let count=0
|
|
|
|
# this while loop iterates over all lines of the file
|
|
while read LINE
|
|
do
|
|
# increase line counter
|
|
((count++))
|
|
# write current line to a tmp file with name $file (not needed for counting)
|
|
echo $LINE > $file
|
|
# this checks the return code of echo (not needed for writing; just for demo)
|
|
if [ $? -ne 0 ]
|
|
then echo "Error in writing to file ${file}; check its permissions!"
|
|
fi
|
|
done
|
|
|
|
echo "Number of lines: $count"
|
|
echo "The last line of the file is: `cat ${file}`"
|
|
|
|
# Note: You can achieve the same by just using the tool wc like this
|
|
echo "Expected number of lines: `wc -l $in`"
|
|
|
|
# restore stdin from filedescriptor 10
|
|
# and close filedescriptor 10
|
|
exec 0<&10 10<&- |