【发布时间】:2019-07-19 03:33:27
【问题描述】:
如果有人运行 -9 并且在标志之后没有为 OPTARG 放置任何内容,我希望操作默认为 -8 标志,或者我可以检查 OPTARG 是否为空并用基数替换空值价值。
ft1 和 ftx 只是格式函数。
当我运行 goat -8 时,它会打印出有问题的文件
当我运行goat -9 SEARCH STRING 时,它会打印仅包含该搜索字符串结果的文件。
如果我运行 goat -9 并且不输入搜索字符串,它什么也不做,因为 OPTARG 是空白的,所以 grep 没有什么可搜索的。
如果用户在goat -9 之后没有输入字符串,我希望它能够将-9 更改为-8。
function goat() {
local OPTIND
local OPTARG
if [ "$1" = "" ] ;
then ft1 ;
printf "
This command requires an OPTION. Refer to the help menu (-h) for assistance.
" | layoutcc
ft1 ;
fi
while getopts ":h89:" opt;
do case $opt in
8) for file in analysis/connection_history.txt ; do ftx $file | layoutcc ;
printf "%s" "$(<$file)"
echo ;
ft1 ;
done
;;
9) grep_expr=$OPTARG
for file in analysis/connection_history.txt ; do
ftx "$file" | layoutcc
grep "$grep_expr" $file | perl -ne 'print if /-201[8-9]/' |
perl -pe 's/......-2019/\e[1;32m$&\e[0m/g'
echo
ft1
done
;;
function ft1
{
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' =
}
function ft2
{
ft1 ;
ft1
}
function ftx
{
ft1 ;
echo " File Name: $1 $(grep -h "Created on" *-Report.txt | head -n1)"
ft1
}
function fsx
{
ft1 ;
echo " File Name: $1"
ft1
}
【问题讨论】:
-
请发布:预期输入,预期输出。请创建一个 MCVE。
ft1和ftx和for file in ..以及与该问题相关的所有其余脚本如何?问题是什么? -
简单地说,我想检查 OPTARG 是否为 NULL,如果是,则在其中放置一个默认值。
-
我不认为
getopts支持这一点。我建议您编写自己的选项解析器。我建议更容易做到-9 ''- 即。为选项传递空参数,然后执行grep_exp=${OPTARG:-default}。可能重复optional argument for getopt。或者移至getopt,它更易于使用、便携性较差,并且支持::的可选参数。