为shell脚本提供参数和帮助部分

为shell脚本提供参数和帮助部分,shell,unix,Shell,Unix,我有一个问题,我想手动确定文件夹名称。例如,如果用户按如下方式运行此脚本 ./scriptname -k 它们可以获取结果,但文件夹名称是在脚本中确定的。如何手动确定文件夹名称,如下所示 您可以将帮助作为函数编写: usage(){ cat <<EOT Usage: ${0##*/} dir1 dir2 EOT } if [ $# -ne 2 ]; then usage echo 'please enter two folder names' exit

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

./scriptname -k 

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

您可以将帮助作为函数编写:

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
用法(){ cat
#!/bin/bash
检查输入目录()
{
如果[[!-f“${folder1}”“${folder2}]”,则
#你的搜索程序
fi
}
显示帮助()
{

cat我昨天删除了一个未经测试的答案,今天带着这个经过测试的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 $*
!/bin/bash
检查输入目录(){
folder1=“$1”
folder2=“$2”
如果[[!-d“${folder1}”&&&!-d“${folder2}”];则
dir1=~/${folder1}
dir2=~/${folder2}
对于$中的i(查找$dir1-printf“%f\n”)
做
查找$dir2-name$i-print
完成
fi
}
显示帮助(){

反复运行cat
find
可能是实现这一点最糟糕的方法。
for i in$dir1/*;do test-e“$dir2/${i#$dir1/}”| continue;echo“$i”;完成
还有为什么你有一个
-d
选项?根据你的描述,这里没有任何选项。-d选项检查目录,因此建议使用其他字母表,如在我的帖子中编辑的-f,你会遇到什么错误,如果你告诉要求一点细节,我可以帮助你解决同样的问题
#!/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 $*