bash脚本case语句需要检测特定的参数

时间:2015-05-17 20:53:10

标签: bash unix scripting arguments lines

我必须编写此脚本,它将显示在其自己的行中输入的每个条目,并用“*****”分隔每一行。我已经在大部分时间内完成了这项工作,但现在我需要它来检测何时输入单词“TestError”和/或“now”作为参数。现在它的设置方式如果它们是线上的第一个参数,它将正确地检测到这些单词,我只是不确定如何将它设置在它将检测到单词的位置,而不管它在线上的哪个参数。我还需要帮助*?如果我不需要“TestError”或“now”,那么我需要它说“不知道该怎么做”的情况,目前它将为第一个参数而不是其余的参数。

它会以现在的方式运作吗?或者我只需要使用*?和*案例,只是在*?中添加if / then / else / fi语句? case以便找到“TestError”“now”和任何其他参数。

# template.sh
function usage
{
  echo "usage: $0 arguments ..."
  if [ $# -eq 1 ]
  then echo "ERROR: $1"
  fi
}



   # Script starts after this line.


case $1 in

  TestError)
     usage $*
     ;;
  now)
     time=$(date +%X)
     echo "It is now $time"
     ;;
  *?)
     echo "My Name"
     date
     echo
     usage
     printf "%s\n*****\n" "Do not know what to do with " "$@"
     ;;
  *)
     usage
     ;;
esac

1 个答案:

答案 0 :(得分:2)

您需要遍历参数,为每个参数执行eigs语句。

pcacov

Ucase将匹配相同的字符串。您的意思是按字面意思匹配for arg in "$@"; do case $arg in TestError) usage $* ;; now) time=$(date +%X) echo "It is now $time" ;; *?) echo "My Name" date echo usage printf "%s\n*****\n" "Do not know what to do with " "$@" ;; *) usage ;; esac done *)吗?