How can I pass a file argument to my bash script using a Terminal command in Linux?
所以我的问题是如何在Linux中使用终端命令将文件参数传递给bash脚本?目前我正在尝试用bash编写一个程序,它可以从终端获取一个文件参数,并将其用作程序中的变量。例如我跑步
1 2 3 | #!/bin/bash File=(the path from the argument) externalprogram $File (other parameters) |
我如何通过我的程序实现这一点?
如果将脚本运行为
1 | myprogram /path/to/file |
然后您可以访问脚本中的路径作为
1 2 | file="$1" externalprogram"$file" [other parameters] |
或者只是
1 | externalprogram"$1" [otherparameters] |
如果您想从类似于
可以使用getopt处理bash脚本中的参数。关于getopt的解释不多。下面是一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #!/bin/sh OPTIONS=$(getopt -o hf:gb -l help,file:,foo,bar --"$@") if [ $? -ne 0 ]; then echo"getopt error" exit 1 fi eval set -- $OPTIONS while true; do case"$1" in -h|--help) HELP=1 ;; -f|--file) FILE="$2" ; shift ;; -g|--foo) FOO=1 ;; -b|--bar) BAR=1 ;; --) shift ; break ;; *) echo"unknown option: $1" ; exit 1 ;; esac shift done if [ $# -ne 0 ]; then echo"unknown option(s): $@" exit 1 fi echo"help: $HELP" echo"file: $FILE" echo"foo: $FOO" echo"bar: $BAR" |
参见:
- "规范"示例:http://software.frodo.looijaard.name/getopt/docs/getopt-parse.bash
- 博客帖子:http://www.missiondata.com/blog/system-administration/17/17/
man getopt
bash支持一个称为"位置参数"的概念。这些位置参数表示在调用bash脚本时在命令行上指定的参数。
位置参数由名称
一个例子:
1 2 3 | #!/bin/bash FILE="$1" externalprogram"$FILE" <other-parameters> |
假设您按照david zaslavsky的建议进行操作,那么第一个参数就是要运行的程序(不需要进行选项解析),您将处理如何将参数2传递给外部程序的问题。这是一个方便的方法:
1 2 3 4 | #!/bin/bash ext_program="$1" shift "$ext_program""$@" |
如果你必须有你的
如果你想自己动手,对于一个特定的案例,你可以这样做:
1 2 3 4 5 | if ["$#" -gt 0 -a"${1:0:6}" =="--file" ]; then ext_program="${1:7}" else ext_program="default program" fi |