xref: /titanic_51/usr/src/lib/libshell/common/scripts/shlint.sh (revision 3e14f97f673e8a630f076077de35afdd43dc1587)
17c2fbfb3SApril Chin#!/usr/bin/ksh93
27c2fbfb3SApril Chin
37c2fbfb3SApril Chin#
47c2fbfb3SApril Chin# CDDL HEADER START
57c2fbfb3SApril Chin#
67c2fbfb3SApril Chin# The contents of this file are subject to the terms of the
77c2fbfb3SApril Chin# Common Development and Distribution License (the "License").
87c2fbfb3SApril Chin# You may not use this file except in compliance with the License.
97c2fbfb3SApril Chin#
107c2fbfb3SApril Chin# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
117c2fbfb3SApril Chin# or http://www.opensolaris.org/os/licensing.
127c2fbfb3SApril Chin# See the License for the specific language governing permissions
137c2fbfb3SApril Chin# and limitations under the License.
147c2fbfb3SApril Chin#
157c2fbfb3SApril Chin# When distributing Covered Code, include this CDDL HEADER in each
167c2fbfb3SApril Chin# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
177c2fbfb3SApril Chin# If applicable, add the following below this CDDL HEADER, with the
187c2fbfb3SApril Chin# fields enclosed by brackets "[]" replaced with your own identifying
197c2fbfb3SApril Chin# information: Portions Copyright [yyyy] [name of copyright owner]
207c2fbfb3SApril Chin#
217c2fbfb3SApril Chin# CDDL HEADER END
227c2fbfb3SApril Chin#
237c2fbfb3SApril Chin
247c2fbfb3SApril Chin#
25*3e14f97fSRoger A. Faulkner# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
267c2fbfb3SApril Chin#
277c2fbfb3SApril Chin
287c2fbfb3SApril Chin#
297c2fbfb3SApril Chin# shlint - a simple lint wrapper around "shcomp"
307c2fbfb3SApril Chin#
317c2fbfb3SApril Chin
327c2fbfb3SApril Chin# Solaris needs /usr/xpg6/bin:/usr/xpg4/bin because the tools in /usr/bin are not POSIX-conformant
337c2fbfb3SApril Chinexport PATH=/usr/xpg6/bin:/usr/xpg4/bin:/bin:/usr/bin
347c2fbfb3SApril Chin
357c2fbfb3SApril Chin# Make sure all math stuff runs in the "C" locale to avoid problems
367c2fbfb3SApril Chin# with alternative # radix point representations (e.g. ',' instead of
377c2fbfb3SApril Chin# '.' in de_DE.*-locales). This needs to be set _before_ any
387c2fbfb3SApril Chin# floating-point constants are defined in this script).
397c2fbfb3SApril Chinif [[ "${LC_ALL}" != "" ]] ; then
407c2fbfb3SApril Chin    export \
417c2fbfb3SApril Chin        LC_MONETARY="${LC_ALL}" \
427c2fbfb3SApril Chin        LC_MESSAGES="${LC_ALL}" \
437c2fbfb3SApril Chin        LC_COLLATE="${LC_ALL}" \
447c2fbfb3SApril Chin        LC_CTYPE="${LC_ALL}"
457c2fbfb3SApril Chin        unset LC_ALL
467c2fbfb3SApril Chinfi
477c2fbfb3SApril Chinexport LC_NUMERIC=C
487c2fbfb3SApril Chin
497c2fbfb3SApril Chinfunction fatal_error
507c2fbfb3SApril Chin{
517c2fbfb3SApril Chin	print -u2 "${progname}: $*"
527c2fbfb3SApril Chin	exit 1
537c2fbfb3SApril Chin}
547c2fbfb3SApril Chin
557c2fbfb3SApril Chinfunction usage
567c2fbfb3SApril Chin{
577c2fbfb3SApril Chin	OPTIND=0
587c2fbfb3SApril Chin	getopts -a "${progname}" "${shlint_usage}" OPT '-?'
597c2fbfb3SApril Chin	exit 2
607c2fbfb3SApril Chin}
617c2fbfb3SApril Chin
627c2fbfb3SApril Chin# program start
637c2fbfb3SApril Chinbuiltin basename
647c2fbfb3SApril Chin
657c2fbfb3SApril Chintypeset progname="${ basename "${0}" ; }"
667c2fbfb3SApril Chin
677c2fbfb3SApril Chintypeset -r shlint_usage=$'+
6834f9b3eeSRoland Mainz[-?\n@(#)\$Id: shlint (Roland Mainz) 2009-03-15 \$\n]
697c2fbfb3SApril Chin[-author?Roland Mainz <roland.mainz@sun.com>]
707c2fbfb3SApril Chin[-author?Roland Mainz <roland.mainz@nrubsig.org>]
717c2fbfb3SApril Chin[+NAME?shlint - lint for POSIX shell scripts]
727c2fbfb3SApril Chin[+DESCRIPTION?\bshlint\b is a lint for POSIX shell scripts.]
737c2fbfb3SApril Chin[+SEE ALSO?\bshcomp\b(1), \bksh93\b(1)]
747c2fbfb3SApril Chin'
757c2fbfb3SApril Chin
767c2fbfb3SApril Chinwhile getopts -a "${progname}" "${shlint_usage}" OPT ; do
777c2fbfb3SApril Chin#	printmsg "## OPT=|${OPT}|, OPTARG=|${OPTARG}|"
787c2fbfb3SApril Chin	case ${OPT} in
797c2fbfb3SApril Chin		*)    usage ;;
807c2fbfb3SApril Chin	esac
817c2fbfb3SApril Chindone
827c2fbfb3SApril Chinshift $((OPTIND-1))
837c2fbfb3SApril Chin
8434f9b3eeSRoland Mainz(( $# > 0 )) || usage
8534f9b3eeSRoland Mainz
867c2fbfb3SApril Chinfile="$1"
877c2fbfb3SApril Chin[[ ! -f "$file" ]] && fatal_error $"File ${file} not found."
887c2fbfb3SApril Chin[[ ! -r "$file" ]] && fatal_error $"File ${file} not readable."
897c2fbfb3SApril Chin
9034f9b3eeSRoland Mainzx="$( /usr/bin/shcomp -n "${file}" /dev/null 2>&1 1>/dev/null  )"
917c2fbfb3SApril Chin
9234f9b3eeSRoland Mainzprintf "%s\n" "$x"
937c2fbfb3SApril Chin
947c2fbfb3SApril Chin[[ "$x" != "" ]] && exit 1 || exit 0
957c2fbfb3SApril Chin# EOF.
96