【问题标题】:Giving a parameter and help section to shell script为 shell 脚本提供参数和帮助部分
【发布时间】:2013-10-14 17:49:49
【问题描述】:

我有一个问题,我想手动确定文件夹名称。例如,如果用户运行如下脚本,

./scriptname -k 

他们可以获取结果,但文件夹名称在脚本中确定。如何手动确定文件夹名称,如下所示?

【问题讨论】:

  • 重复运行find 可能是最糟糕的实现方式。 for i in $dir1/*; do test -e "$dir2/${i#$dir1/}" || continue; echo "$i"; done
  • 另外你为什么有-d 选项?根据您的描述,这里没有什么是可选的。
  • -d 选项检查目录,因此建议使用其他一些字母,例如在我的帖子中编辑的 -f

标签: shell unix


【解决方案1】:

你可以把帮助写成一个函数:

usage(){
cat <<EOT
Usage: ${0##*/} dir1 dir2
EOT
}

if [ $# -ne 2 ]; then
    usage
    echo 'please enter two folder names'
    exit 1
fi

if [ ! -d "$1" ]; then
    usage
    echo "$1 is not a folder"
    exit 1
fi

if [ ! -d "$2" ]; then
    usage
    echo "$2 is not a folder"
    exit 1
fi

# continue script

【讨论】:

    【解决方案2】:
    #!/bin/bash
    
    check_input_directories()
    {
        if [[ ! -f "${folder1}" "${folder2}" ]]; then
    
            #your searching program
    
    fi
    }
    Show_help()
    {
    
    cat <<_EOF
    Usage  : $0 <options>        <path>
                Options:
                   -f       <folder>  <folder>
    _EOF
    }
    
    MAIN () {
    
    case "$1" in
                            -f)
                                    check_input_directories
                             ;;
                             *)
                                    Show_help
    
    esac
    
    }
    
    MAIN $*
    

    【讨论】:

    • 您遇到了什么错误,如果您详细说明要求,我可以帮助您解决同样的问题
    【解决方案3】:

    我昨天删除了一个未经测试的答案,今天带着这个经过测试的 bash 脚本返回:

    #!/bin/bash
    
    check_input_directories() {
    
      folder1="$1"
      folder2="$2"
    
      if [[ ! -d "${folder1}" && ! -d "${folder2}" ]]; then
    
        dir1=~/${folder1}
        dir2=~/${folder2}
    
        for i in $(find $dir1 -printf "%f\n")
        do
          find $dir2 -name $i -print
        done
    
      fi
    }
    
    Show_help() {
    
      cat <<_EOF
        Usage  : $0 <options>        <path>
        You can use this script as below,
        -d       folder1/ folder2/
      _EOF
    }
    
    MAIN () {
      case "$1" in
        -d)
          check_input_directories $2 $3
          ;;
        *)
          Show_help
      esac
    }
    
    MAIN $*
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-31
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 2010-09-21
      相关资源
      最近更新 更多