相关疑难解决方法(0)

如何在Bash中解析命令行参数?

说,我有一个用这行调用的脚本:

./myscript -vfd ./foo/bar/someFile -o /fizz/someOtherFile
Run Code Online (Sandbox Code Playgroud)

或者这个:

./myscript -v -f -d -o /fizz/someOtherFile ./foo/bar/someFile 
Run Code Online (Sandbox Code Playgroud)

什么是分析这使得在每一种情况下(或两者的组合)的接受的方式$v,$f以及 $d将全部设置为true$outFile将等于/fizz/someOtherFile

bash scripting command-line arguments getopts

1764
推荐指数
24
解决办法
136万
查看次数

一个如何在bash中使用getopts的例子

我想以myscript这种方式调用文件:

$ ./myscript -s 45 -p any_string
Run Code Online (Sandbox Code Playgroud)

要么

$ ./myscript -h  #should display help
$ ./myscript     #should display help
Run Code Online (Sandbox Code Playgroud)

我的要求是:

  • getopt 这里得到输入参数
  • 检查是否-s存在,如果没有返回错误
  • 检查之后的值-s是45还是90
  • 检查是否-p存在并且之后有输入字符串
  • 如果用户输入./myscript -h或只是./myscript显示帮助

我到目前为止尝试了这段代码:

#!/bin/bash
while getopts "h:s:" arg; do
  case $arg in
    h)
      echo "usage" 
      ;;
    s)
      strength=$OPTARG
      echo $strength
      ;;
  esac
done
Run Code Online (Sandbox Code Playgroud)

但是使用该代码我会收到错误.怎么用Bash和getopt

bash shell getopts

310
推荐指数
7
解决办法
44万
查看次数

如何向shell脚本添加帮助方法?

如何检查-h属性是否已传递到shell脚本?我想在用户呼叫时显示帮助消息myscript.sh -h.

unix shell

117
推荐指数
6
解决办法
12万
查看次数

将stdout和stderr捕获到不同的变量中

是否可以在不使用临时文件的情况下在不同的变量中存储或捕获stdout和stderr ?现在我这样做是为了outerr运行时获取stdout 和stderr some_command,但是我想避开临时文件.

error_file=$(mktemp)
out=$(some_command 2>$error_file)
err=$(< error_file)
rm $error_file
Run Code Online (Sandbox Code Playgroud)

bash shell command-line io-redirection

62
推荐指数
8
解决办法
3万
查看次数

有没有办法避免bash中的位置参数?

我必须在bash中编写一个函数.该函数将需要大约7个参数.我知道我可以调用这样的函数:

要使用参数调用函数:

function_name $arg1 $arg2
Run Code Online (Sandbox Code Playgroud)

我可以在函数中引用我的参数:

function_name () {
   echo "Parameter #1 is $1"
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有更好的方法参考函数内部的参数?我可以避免$ 1,$ 2,$ 3,......的事情,只需使用$ arg1,$ arg2,......?

是否有适当的方法或我是否需要将这些参数重新分配给函数内的其他变量?例如:

function_name () {
   $ARG1=$1
   echo "Parameter #1 is $ARG1"
}
Run Code Online (Sandbox Code Playgroud)

任何例子都将非常感激.

bash shell scripting

51
推荐指数
3
解决办法
3万
查看次数

术语之间的区别:"选项","参数"和"参数"?

这些术语有什么区别:"选项","参数"和"参数"?在手册页中,这些术语通常似乎可以互换使用.

parameters bash shell arguments option

50
推荐指数
3
解决办法
2万
查看次数

如何在bash中同时支持短期和长期期权?

我想在bash脚本中支持短期和长期选项,因此可以:

$ foo -ax --long-key val -b -y SOME FILE NAMES
Run Code Online (Sandbox Code Playgroud)

可能吗?

bash getopt getopt-long

29
推荐指数
1
解决办法
3万
查看次数

/ bin/sh中的$ {1:+"$ @"}

我注意到有时包装脚本将${1:+"$@"}用于参数而不仅仅是"$@".

例如,http://svn.macosforge.org/repository/macports/trunk/dports/editors/vim-app/files/gvim.sh使用

exec "$binary" $opts ${1:+"$@"}
Run Code Online (Sandbox Code Playgroud)

任何人都可以分解${1:+"$@"}成英语并解释为什么它会优于普通的优势"$@"吗?

shell

27
推荐指数
1
解决办法
1万
查看次数

Bash getopts:为可选标志读取$ OPTARG?

我希望能够在我的脚本中接受强制和可选标志.这是我到目前为止所拥有的.

#!bin/bash

while getopts ":a:b:cdef" opt; do
      case $opt in
        a ) APPLE="$OPTARG";;
        b ) BANANA="$OPTARG";;
        c ) CHERRY="$OPTARG";;
        d ) DFRUIT="$OPTARG";;
        e ) EGGPLANT="$OPTARG";;
        f ) FIG="$OPTARG";;
        \?) echo "Invalid option: -"$OPTARG"" >&2
            exit 1;;
        : ) echo "Option -"$OPTARG" requires an argument." >&2
            exit 1;;
      esac
    done
echo "Apple is "$APPLE""
echo "Banana is "$BANANA""
echo "Cherry is "$CHERRY""
echo "Dfruit is "$DFRUIT""
echo "Eggplant is "$EGGPLANT""
echo "Fig is "$FIG""
Run Code Online (Sandbox Code Playgroud)

但是,输出如下:

bash script.sh -a apple -b banana …
Run Code Online (Sandbox Code Playgroud)

bash

24
推荐指数
5
解决办法
6万
查看次数

如何在mac中使用"getopt"命令进行bash处理长参数?

我想让我的bash脚本处理长参数.我找到了getopt,但它在OS X中不受支持.任何人都可以告诉我为什么getoptBSD实现了,而不是GNU?我尝试getopt在GNU C lib中构建,但由于我在Linux上的技能不佳而失败了.

有人做过这项工作吗?

macos bash gnu

19
推荐指数
3
解决办法
1万
查看次数