Unix使用-help选项运行脚本

时间:2014-08-18 08:47:23

标签: unix

我有以下脚本,当用户调用sh <scriptName> <propertyfile>时,它可以工作。当我在美元提示时提供此脚本时,它确实有效。但是,我对脚本有两个问题。

  1. 如果我只提供一个参数,即如果我这样做 - sh <scriptName>,我会看到以下错误 -

    my-llt-utvsg$ sh temp.sh
    Usage temp.sh
    
  2. 当我做-help时,我看到以下错误 -

    my-llt-utvsg$ sh tmp.sh -help
    -help does not exist
    
  3. 我做错了什么?有人可以建议吗?我是一个很少需要编写shell脚本的软件开发人员,所以请放轻松我;)

    #!/bin/bash
    FILE="system.properties"
    FILE=$1
    if [ ! -f $FILE ];
    then
       echo "$FILE does not exist"
    exit
    fi
    usage ()
    {
      echo "Usage $0 $FILE" 
      exit
    }
    if [ "$#" -ne 1 ]
    then
      usage
    fi
    if [ "$1" = "-help" ] ; then
    echo ""
    echo '############ HELP PROPERTIES ############    '
    echo ""
    echo 'Blah.'
    exit
    

2 个答案:

答案 0 :(得分:1)

你的原因

if [ "$1" = "-help" ] ; then

检查不起作用是它只检查$1或第一个参数。

尝试改为:

for var in "$@"
do
    if [ "$var" = "-help" ] ; then
        echo ""
        echo '############ HELP PROPERTIES ############    '
        echo ""
        echo 'Blah.'
    fi
done

哪个循环遍历每个参数,因此如果其中任何参数都是-help就会运行。

答案 1 :(得分:1)

试试这个:

#!/bin/bash

FILES=()

function show_help_info_and_exit {
    echo ""
    echo '############ HELP PROPERTIES ############    '
    echo ""
    echo 'Blah.'
    exit
}

function show_usage_and_exit {
    echo "Usage: $0 file" 
    exit
}

for __; do
    if [[ $__ == -help ]]; then
        show_help_info_and_exit
    elif [[ -f $__ ]]; then
        FILES+=("$__")
    else
        echo "Invalid argument or file does not exist: $__"
        show_usage_and_exit
    fi
done

if [[ ${#FILES[@]} -ne 1 ]]; then
    echo "Invalid number of file arguments."
    show_usage_and_exit
fi

echo "$FILES"