linux - 在 bash 中执行 shell 脚本时如何控制用户定义的命令?

标签 linux bash shell awk scripting

我正在创建一个有自己的命令(或选项)的 shell 脚本。简而言之,我用于执行脚本的命令行是(在终端中):./myscript.sh -o:1,2,3,4./myscript.sh -e:2,3,4。到目前为止,代码(选项部分)如下所示:

myscript.sh

for i
do
  case "$i" in
    "-o:"*|"--only:"*)
        # check if 1 is not included (if it is then exit)
        ;;

    "-e:"*|"--except:"*)
        # check if 1 is excluded (if it is then exit)
        ;;

    *)
      echo -e "invalid option\nTry './audit.sh --help' for help"
      exit
      ;;
  esac
done

说明:

此代码的目的是对用户通过 ./myscript.sh -o:1,2,3,4 传递的所有值求和,或减去 ./myscript.sh -e:2,3,4 的值。 o 是“唯一”选项,它仅将从此选项传递给脚本的数字相加。 e 是“排除”选项,它排除用户定义的值并从 100 中减去这些值。

我有一个限制,即数字 1 必须始终存在(无论是加还是减)。所以我不能排除数字 1。以下是非法用户输入命令 (./myscript.sh -e:1,2,3,4) 和 (./myscript.sh -o:2,3,4) 的一些示例。

如何检查数字 1 是否始终包含在 only 选项中,以及数字 1 是否未从 exclude 选项中排除?谢谢。

编辑:我想要采用的方法是使用awk。有什么建议吗?

最佳答案

  1. 获取要检查的值
  2. 前后加逗号
  3. 检查,1,是否为子字符串

实现:

i="--only:3,4,5"

value=${i#*:}           # Strip prefix up to colon

if [[ ,$value, == *,1,* ]]  # Check if ,1, is a substring
then
  echo "You have a 1 in your list."
else
  echo "You're missing 1"
  exit 1
fi

要反转检查排除,您可以使用!=

关于linux - 在 bash 中执行 shell 脚本时如何控制用户定义的命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24459968/

相关文章:

python - linux下如何交叉编译windows的python解释器

linux - 如何在 openSuse 上升级单声道

linux - Vim 颜色不正确 - Konsole 和 Yakuake

bash - 如果第 2 列字段有多个值,则格式化输出

linux - 用于在本地主机中打开文件的 Bash 函数

linux - 使用 awk 命令遍历文本文件并递增脚本的早上、下午和晚上部分的计数器

linux - 在 bash 脚本中转义空格

linux - 脚本手动工作但不通过 crontab

linux - 自动执行命令的本地Linux用户无法关闭

shell - 如何设置ssh超时时间?