Bash脚本和getopts输出保存的变量

Bash脚本和getopts输出保存的变量,bash,shell,getopts,Bash,Shell,Getopts,我正试图编写一个脚本来监控文件,我对getopts有一个很难的了解。如果我运行多次,shell值不会改变。。。有大量的清理工作,但我在这个问题上已经坚持了几个小时,所以 #!/bin/bash function printUsage { echo "Usage: $0 [-e environment] [-r region] [-l logtype]" echo "Requirements:" echo " -e environment to look in; prod or d

我正试图编写一个脚本来监控文件,我对getopts有一个很难的了解。如果我运行多次,shell值不会改变。。。有大量的清理工作,但我在这个问题上已经坚持了几个小时,所以

#!/bin/bash

function printUsage {
  echo "Usage: $0 [-e environment] [-r region] [-l logtype]"
  echo "Requirements:"
  echo "  -e environment to look in; prod or dev"
  echo "  -r 3 digit region designation"
  echo "  -l log type to find; soap, message, main, service, or detail"
  echo " example: $0 -e dev -r 111 -f soap"
  exit 0
}

if [ $# -lt 1 ]; then
  printUsage
fi

while getopts "e:r:l:" opt; do
   case $opt in
      e)
      environment="$OPTARG"
      ;;
      r)
      region="$OPTARG"
      ;;
      l)
      logtype="$OPTARG"          
      ;;
      \?)
      echo "Invalid option: -$OPTARG"
      printUsage;;
      :)
      echo "-$OPTARG requires an argument"
      printUsage;;
    esac
done

#build array of directories to search based on argument
function buildProductionArray {

# assume these are here

logpaths=(  )
}

#build array of directories to search based on argument
function buildDevArray {

# assume these are here

logpaths=(  )
}

function validateArguments {

#validate the environment
if [ "$(echo "$environment" | tr "[:lower:]" "[:upper:]")" == "PROD" ]; then
   buildProductionArray
elif [ "$(echo "$environment" | tr "[:lower:]" "[:upper:]")" == "DEV" ]; then
   buildDevArray
else
   echo "Usage: findlog [-e environment] [-r region] [-l logtype]"
   echo "Invalid environment" >&2; exit 1
fi

#validate the region
if ! [ "$region" -eq "$region" ] 2>/dev/null; then
echo "Usage: findlog [-e environment] [-r region] [-l logtype]"
  echo "Invalid region" >&2; exit 1
fi

#validate the logtype
function in_array() {
elements=${1}
    element=${2}
    for i in "${elements[@]}" ; do
        if [ "$i" == "$element" ] ; then
            return 1
        fi
    done
    return 0
}

logvalues=(soap message service main detail)

log="$(echo "$logtype" | tr '[:upper:]' '[:lower:]')"
echo "$log"
if in_array logvalues "${log}"; then 
  if [[ "$log" == "service" || "$log" == "detail" ]]; then
     log="-$log-time-"
  else
     log="-$log-"
     fi
  else
  echo "Usage: findlog [-e environment] [-r region] [-l logtype]"
   echo "Invalid environment" >&2; exit 1

fi
}

validateArguments


for i in "${logpaths[@]}"
do
   #assume this is here
done

哇,代码太多了。除了显示问题所需的行之外,您可以删除所有内容吗?请参见,使用bash,您可以将
[“$(echo“$environment”| tr”[:lower:”“[:upper:”)==“PROD”]
编写为
[[${environment^^}==PROD]
您是如何运行它的?如果您执行
。脚本
,您将遇到$optin无法重置的问题。请注意,
^
操作符是在
bash
4中引入的。@glennjackman?