Bash:getopts中的默认布尔值

时间:2019-06-12 01:29:11

标签: bash shell scripting getopts

我想在脚本中包含一个默认选项,如果用户使用此选项,请将标志设置为true或默认情况下应为false。脚本似乎不接受false或true作为布尔值。我如何使它成为布尔值?

flag=

instructions() {
  echo " -a File name" >&2
  echo " -f optional boolean" flag=${flag:-false}
}

while getopts ":a:fi" option; do
  case "$option" in
    a ) file=$OPTARG;;
    f ) flag=true;;
    u )  
       instructions
       ;;
    \?)
      echo "Not valid -$OPTARG" >&2
      instructions
      ;;
    : ) echo "args required";;
  esac
done

if [[ "$flag" != true || "$flag" != false ]]; then
  echo "Not a boolean value"
fi

1 个答案:

答案 0 :(得分:1)

选中此选项,我对您的脚本进行了一些修复(在代码中添加了注释)以及正确的格式。

#!/bin/bash

# Set the default value of the flag variable
flag=false

instructions() {
  echo "Usage: $0 [ -a FILE ] [ -f ]" >&2
  echo " -a File name" >&2
  echo " -f optional boolean flag=${flag:-false}" >&2
}


# If the script must be executed with options, this checks if the number of arguments
# provided to the script is greater than 0
if [ $# -eq 0 ]; then
    instructions
    exit 1
fi

while getopts ":a:fi" option; do
  case "${option}" in
    a ) 
       file="$OPTARG"
       ;;
    f ) 
       flag=true
       ;;
    i ) # "u" is not a valid option
       instructions
       exit 0
       ;;
    \?)
       echo "Option '-$OPTARG' is not a valid option." >&2
       instructions
       exit 1
       ;;
    : )
       echo "Option '-$OPTARG' needs an argument." >&2
       instructions
       exit 1
       ;;
  esac
done

# Since a variable can't have 2 values assigned at the same time, 
# you should use && (and) instead of || (or)
if [[ "$flag" != true ]] && [[ "$flag" != false ]]; then
  echo "Not a boolean value"
fi

exit 0