【问题标题】:Restricting Bash Arguments?限制 Bash 参数?
【发布时间】:2014-09-17 21:42:34
【问题描述】:

这是我的 bash 脚本,非常简单,目前没有任何内容:

#!/bin/bash

NO_ARGUMENTS=0
ARG_ERROR=10

if [ $# -eq "$NO_ARGUMENTS" ]
then
  echo "Usage: `basename $0` options (-h -C -m)"
  exit $ARG_ERROR
fi

helpscreen()
{
echo
echo "========================"
echo "Help Screen:"
echo "Available Arguments:"
echo "-h - Displays this screen"
echo "-C - Complete Install"
echo "-m - Minimal Install"
echo "========================="
echo 
}

completeinstall()
{
echo "Complete Install Initiating"
}

minimalinstall()
{
echo "Minimal Install Initiating"
}

while getopts ":hCm" Option
do
  case $Option in
    h) helpscreen;;
    C) completeinstall;;
    m) minimalinstall;;
    *) echo "Option Not Available.";;
  esac
done

exit

如您所见,它仅在选择 ./test.sh -h、-C 或 -m 时运行选项。我的问题是用户可以选择 -Cm 并让它运行完整和最小安装。我如何编辑它以阻止此类事件发生/限制选项。

【问题讨论】:

  • 添加休息时间? C) completeinstall; break;; ?祝你好运。
  • =S 在很多其他脚本上都这样做了,只是不是以这种方式。解决了=P!如果您愿意,您可以继续将其发布为答案。
  • 仅供参考,一种传统的方法是不将独占“模式”类型设置作为标志传递,而是将独占参数视为子命令; IE。 ./install complete./install minimal;这样就不需要强制执行,因为有可选标志。

标签: bash arguments getopts


【解决方案1】:

不要循环,因为你只关心一个选项。

getopts ":hCm" Option
case $Option in
  h) helpscreen;;
  C) completeinstall;;
  m) minimalinstall;;
  *) echo "Option Not Available.";;
esac

或者为每个案例添加break

while getopts ":hCm" Option
do
  case $Option in
    h) helpscreen;      break;;
    C) completeinstall; break;;
    m) minimalinstall;  break;;
    *) echo "Option Not Available.";;
  esac
done

exit

【讨论】:

  • 正在等待 shellter 发布信用,但你去吧。它工作得很好!
  • 无论如何,这是一个更完整的答案。祝大家好运。
猜你喜欢
  • 1970-01-01
  • 2019-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 2014-05-04
  • 1970-01-01
相关资源
最近更新 更多