#!/bin/sh usage() { >&2 printf "usage: %s [-s tab|space] [file ...]\n" "$(basename "$0")" exit 1 } is=tab while getopts :s: o do case "$o" in s) test "$OPTARG" != tab && test "$OPTARG" != space && usage is="$OPTARG" ;; ?) usage ;; esac done shift "$((OPTIND-1))" awk -v is="$is" ' BEGIN { s=0 } is=="tab" && /^ [^\*]/ { f="%s:%d:%d: Spaces detected\n" printf f, FILENAME, FNR, index($0, " ") | "cat 1>&2" s=1 } is=="space" && /^ / { f="%s:%d:%d: Tabs detected\n" printf f, FILENAME, FNR, index($0, " ") | "cat 1>&2" s=1 } END { exit s } ' "$@"