2017-03-17 165 views
1

基本上我想要做的是创建一个if条件来评估程序是否已经用特定参数启动。从参数中获取字符串的第一个字

基本上你的程序

./testprogram 

./testprogram [-i EXCEPTION] DIR 

我想要做的是,确定该计划是否已经启动与参数三种启动选项。以下是启动选项:

  • 如果推出不带参数,它会设置为当前工作目录
  • 如果有异常启动,如果用DIR推出将执行特定任务
  • ,它将设置DIR作为设定参数

所以我创建了以下功能

parse_arg(){ 
    # when launched with no argument, fairly self explanatory 
    if [[ $# == '0' ]]; then 
    DIR="$PWD" 
    DIR=$DIR 
    fi 

现在,这里是棘手的部分,我需要弄清楚一种方式,来检查第二段是否是异常或简单的目录,换句话说,我只是不能将它硬化为我们已经启动的大量参数。我试图做的是创建一个参数来帮助我建立的,如果条件

I_DETECT="$1" 现在是什么我不知道,如果,如何削减基本的话里面的字符串,同时也保持空白控制。

只有我能想到的方法是基本回显出来,然后使用剪切功能。问题是,我需要回声它

我想这

I_DETECT=$(echo I_DETECT | awk '{print $1;})' 

    elif [[ $# == '1' && $I_DETECT != "-i" ]] then; 
    ... #you get the point 

问题是使用awk工具的性质,它最终还是打印出来到标准输出,当所有我想要的是评估表达式if条件。

因此,任何想法更优雅的解决方案?

+1

我有很多问题:(1)“DIR = $ DIR”的缺点是什么? (2)你为什么想要削减'$ 1'中的单词?一个正确的'testprogram'调用要么有'$ 1 = -i'或'$ 1 = someDir'。 ''-i“'只有一个字,'someDir'可能不应该被分割。 (3)你想分裂的单词是什么:把所有的单词放入一个数组中,只提取第* n个单词,...? – Socowi

+0

你在找'shift'吗?另外,请阅读[Bash FAQ/035](http://mywiki.wooledge.org/BashFAQ/035)和[ComplexOptionParsing](http://mywiki.wooledge.org/ComplexOptionParsing)。 –

回答

0

getopt是解析参数的好方法,包括--long-options。它将避免这份工作中最枯燥的部分。

+0

此外,对于更简单的要求(比如没有长选项),内置'getopts'可用。 –

相关问题