linux - 在没有getopts的shell脚本中添加使用内容

标签 linux shell unix getopts

我有脚本,我需要在其中显示用法命令,以防用户在执行脚本时错过任何强制信息。

Usage : Script -s <server> -i <instance> -u <user> -p <password> <query> -w <warning value> -c <critical value>

关于所有OPTIONS的解释

我从以下变量时尚的参数中获取值。但我希望在 shell 脚本中使用这种验证方法。

SERVER=$1
INSTANCE=$2
USER=$3
DB_PASSWD=$4
QUERY=$5
VAL_WARN=$6
VAL_CRIT=$7

我尝试过使用 getopts,但自从 <query> 后就无法使用了没有 -q传递值之前的参数。

我试过寻找所有其他方法,但每个人都建议 getopts 这对我来说不是可行的解决方案。

请帮我解决这个问题..

最佳答案

使用 shift 遍历所有参数,例如:

#!/bin/sh

usage ()
{
  echo 'Usage : Script -s <server> -i <instance> -u <user> -p <password>'
  echo '                  <query> -w <warning value> -c <critical value>'
  exit
}

if [ "$#" -ne 13 ]
then
  usage
fi

while [ "$1" != "" ]; do
case $1 in
        -s )           shift
                       SERVER=$1
                       ;;
        -i )           shift
                       INSTANCE=$1
                       ;;
        -u )           shift
                       USER=$1
                       ;;
        -p )           shift
                       PASSWORD=$1
                       ;;
        -w )           shift
                       WARNINGVAL=$1
                       ;;
        -c )           shift
                       CRITICVAL=$1
                       ;;
        * )            QUERY=$1
    esac
    shift
done

# extra validation suggested by @technosaurus
if [ "$SERVER" = "" ]
then
    usage
fi
if [ "$INSTANCE" = "" ]
then
    usage
fi
if [ "$USER" = "" ]
then
    usage
fi
if [ "$PASSWORD" = "" ]
then
    usage
fi
if [ "$QUERY" = "" ]
then
    usage
fi
if [ "$WARNINGVAL" = "" ]
then
    usage
fi
if [ "$CRITICVAL" = "" ]
then
    usage
fi

echo "ALL IS WELL. SERVER=$SERVER,INSTANCE=$INSTANCE,USER=$USER,PASSWORD=$PASSWORD,QUERY=$QUERY,WARNING=$WARNINGVAL,CRITIC=$CRITICVAL"

应该可以解决问题。

编辑:按照@technosaurus 的建议在脚本中添加了参数验证

关于linux - 在没有getopts的shell脚本中添加使用内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14975057/

相关文章:

linux - 安装 Arch 能否阻止我的笔记本电脑卡在启动屏幕上?

Git Hook - 预提交 - 问题 - exec 后不执行

bash - 如何根据 svn 评论中的字符串获取颠覆 URL(主干/分支)中的所有修订?

python - 通过 Python/Fabric 从命令行更改 Unix 密码

java - 当我能够通过 FileZilla 连接时,我无法从 SFTP 文件源中提取文件

linux - 删除shell脚本中以特定字符串开头的目录

c++ - 使用 Linux 访问并口

linux - 如何使用 unix 工具将两个输入文件随机合并为一个输出文件?

linux - 在 Linux Bash 脚本中调用基于 ip 地址的函数

linux - 如何更改MTD设备序列号?