bash - 无法将可选标志默认为 bash 脚本
问题描述
我有一个脚本,它有 2 个可选标志和 1 个必需标志。我正在使用 getopts 来获取参数。
#!/usr/bin/env bash
dt=`date '+%Y-%m-%d'`
while getopts s:fd flag
do
case "${flag}" in
s) onhand_src=${OPTARG};;
f) download_ftr=${OPTARG:-false};;
d) run_dt=${OPTARG:-$dt};;
esac
done
echo $onhand_src
echo $download_ftr
echo $run_dt
其中 -s 是必需标志,f 和 d 是可选标志。download_ftr
如果未传递 -f 标志,则应默认为 false,如果未传递 -d 标志,则 run_dt 应默认为 dt。
但是,当我不传递 -f 和 -d 标志时,download_ftr 和 run_dt 变量不会设置为任何值。少了什么东西?
解决方案
如果选项没有提供相应的参数,您的代码只会设置默认值。但是,如果根本不使用该选项,则根本不会执行这些案例。
所以你需要在循环之前初始化默认值。
download_ftr=false
run_dt=dt
while getopts s:fd flag
do
case "${flag}" in
s) onhand_src=${OPTARG};;
f) download_ftr=${OPTARG:-false};;
d) run_dt=${OPTARG:-dt};;
esac
done
推荐阅读
- asp.net - Global.asax 是 HttpHandler 还是 HttpModule?
- tensorflow - 用于比较相同架构中的训练损失的指标
- r - 用 2 个元素总结 R 中的数据框
- java - 是否可以在 ANTLR4 中包含(但不导入)独立语法?
- python - 使用 SSIM ,尝试比较图像并尝试分别获取亮度、对比度和结构
- angular - 无法从一个组件向另一个组件发出功能
- java - com.mongodb.client.MongoClient 和 com.mongodb.MongoClient 的区别
- javascript - 有没有办法在Javascript中向数组添加一个空元素?
- google-maps - 谷歌地图设置航向不起作用,地图仍然向北行驶
- python - 获取docker容器内主机的MAC地址