在getopts中的while case语句中使用if阻塞是否是一种好习惯

问题描述

    #!/bin/bash
while getopts ':s:r:' c
do
  case $c in
    s) if [ "$OPTARG" -ge 0 ]; then
        echo "value is $OPTARG"
       else 
         echo "enter value greater than 0";;
    r) echo "something";;
   
  esac
done

还是应该从案例陈述中删除if块,并将其放在case while循环之后?

什么是良好做法?我可以参考任何文档吗?

解决方法

在getopts的while case语句中使用if阻塞是一种好习惯吗

主观:当然,为什么不呢?除非您缺少fi

我应该从case语句中删除if块,并将其放在case while循环之后吗?

主观:它将是首选。对我来说。

什么是好的做法?

我相信一种常见的方法是只在选项解析中设置变量,然后在解析选项后编写健全性检查。但这不是通用的方法,对于某些应用程序在解析选项时执行一些逻辑可能更可取。与往常一样,最终的答案是:“取决于”。

我可以参考任何文档吗?

Linux手册页和POSIX程序员手册。 man 1p getopts有一个很好的例子,展示了如何先设置标志,然后编写健全性检查。