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