0

我知道可能会对此提出类似的问题,但我是 shell 脚本的新手并且没有找到帮助(可能是我无法理解技术细节)。我有一个简单的问题:

我有一个简单的脚本(testscript.sh),它需要 3 个参数,我使用三个参数传递这些参数并运行它:(第一个参数是一个简单的字符串,第二个是文件名的路径,第三个是文件夹名称)

./testscript.sh --para1 "somestring" --para2 "/home/android/test/abc.xml" --para3 "/home/android/outputfolder"

现在我想检查用户是否提供了所有带有正确参数的 reqd 输入值。我的意思是 para3 必须包含文件夹名称,para2 必须是文件名 & para1 必须是字符串,或者它们以相同的顺序出现。

另外我想验证一件事:目前我希望用户输入双引号括起来的文件名“/home/android/test/abc.xml”,但如果用户没有用双引号括起来&文件夹/filename 中有一个空格,它会产生问题,因为我无法获得包括空格在内的完整文件/文件夹名称,它正在破坏。

请帮忙。谢谢

4

2 回答 2

2

这应该工作

#!/bin/sh

usage ()
{
  echo "usage: $0 STRING FILE DIRECTORY"
  exit
}

[ -n "$1" ] || usage
[ -e "$2" ] || usage
[ -d "$3" ] || usage

参考

于 2013-01-18T18:09:18.000 回答
1

无法完全符合我的要求,但可以通过以下方式运行:修改脚本运行方式为:

./testscript.sh -p "somestring" -i "/home/android/test/abc.xml" -o "/home/android/outputfolder"

并在脚本中添加检查为:

while getopts ":p:i:o:" opt; do
  case $opt in
    p)
      if [ "$OPTARG" = "abc" ] || [ "$OPTARG" = "xyz" ]; then
        somestring=$OPTARG
      else
        echo "Invalid parameter" >&2
        usage
      fi
      ;;
    i)
      if [ -e $OPTARG ] && [ -f $OPTARG ]; then 
    input=$OPTARG
       else
        echo "Input file doest'nt exist " >&2
        usage
      fi
      ;;
    o)
      if [ -e $OPTARG ]; then
    ouput=$OPTARG
      else
        echo "Output folder doest'nt exist " >&2
        usage
      fi
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument." >&2
      exit 1
      ;;
  esac
done

但是仍然有人找到我的问题的确切解决方案(使用“--para1”),欢迎回答!

于 2013-01-24T05:57:42.340 回答