Lan*_*est 25 variables bash default command-line-arguments
我有一个包含多个输入文件的脚本,通常这些是默认存储在标准位置并由脚本调用.
但是,有时需要使用更改的输入来运行它.
在脚本中我现在说3个变量$ A $ B和$ C,现在我想用非默认的$ B运行它,明天我可能想用非默认的$ A和$ B来运行它.
我已经了解了如何解析命令行参数: 如何在Bash中解析命令行参数?
但我不知道如何在某些时候处理由命令行语句设置的问题?
我没有足够的代表回答我自己的问题,但我有一个解决方案:
#!/bin/bash
a=input1
b=input2
c=input3
while getopts "a:b:c:" flag
do
case $flag in
a) a=$OPTARG;;
b) b=$OPTARG;;
c) c=$OPTARG;;
esac
done
Run Code Online (Sandbox Code Playgroud)
道歉我显然没有像我想的那样彻底搜索......
cod*_*ape 55
您可以这样做,请参阅bash手册页中的Shell参数扩展
#! /bin/bash
value=${1:-the default value}
echo value=$value
Run Code Online (Sandbox Code Playgroud)
在命令行上:
$ ./myscript.sh
value=the default value
$ ./myscript.sh foobar
value=foobar
Run Code Online (Sandbox Code Playgroud)
您也可以在脚本之外设置变量,而不是使用命令行参数来覆盖默认值.例如,可以使用foo=54 /tmp/foobar或调用以下脚本bar=/var/tmp /tmp/foobar:
#! /bin/bash
: ${foo:=42}
: ${bar:=/tmp}
echo "foo=$foo bar=$bar"
Run Code Online (Sandbox Code Playgroud)