mirror of https://github.com/01-edu/public.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
945 B
52 lines
945 B
2 years ago
|
#!/bin/bash
|
||
|
|
||
|
while getopts "clr" opt; do
|
||
|
case $opt in
|
||
|
c) exclude_comments=true;;
|
||
|
l) show_length=true;;
|
||
|
r) show_recap=true;;
|
||
|
*) echo "Usage: $0 [-c] [-l] [-r] [file1] [file2] ..." >&2
|
||
|
exit 1;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
shift $((OPTIND-1))
|
||
|
|
||
|
if [[ $# -eq 0 ]]; then
|
||
|
set -- *
|
||
|
fi
|
||
|
|
||
|
line_count=0
|
||
|
char_count=0
|
||
|
|
||
|
for file in "$@"; do
|
||
|
if [[ ! -e $file ]]; then
|
||
|
echo "$0: $file: No such file or directory" >&2
|
||
|
continue
|
||
|
fi
|
||
|
|
||
|
line_num=0
|
||
|
while read -r line; do
|
||
|
line_num=$((line_num+1))
|
||
|
if [[ $exclude_comments && $line == \#* ]]; then
|
||
|
continue
|
||
|
fi
|
||
|
if [[ $show_length ]]; then
|
||
|
echo "$line_num ($(( ${#line} ))): $line"
|
||
|
else
|
||
|
echo "$line_num: $line"
|
||
|
fi
|
||
|
char_count=$((char_count+${#line}))
|
||
|
done < "$file"
|
||
|
|
||
|
line_count=$((line_count+line_num))
|
||
|
done
|
||
|
|
||
|
if [[ $show_recap ]]; then
|
||
|
echo "Total: $line_count lines, $char_count characters"
|
||
|
fi
|
||
|
|
||
|
if [[ $line_count -eq 0 ]]; then
|
||
|
exit 1
|
||
|
fi
|