【发布时间】:2015-04-02 17:57:02
【问题描述】:
我在使用 getopts 和简单的 bash 参数时遇到了问题。我的脚本从与指定表达式匹配的文件行中写出。
-f 选项允许您更改文件
-n 选项改变写出的行数
第一个参数$1决定表达式的类型
示例文件(file.txt):
aaaaaaaaaaaa
bbbbbbbbbbba
cccccccccccc
ab
ac
dddddddddddd
dgdgdgdgdgdg
abdbdbdbdbdb
示例顺序:
./script.sh a -f file.txt -n 2
示例输出:
aaaaaaaaaaaa
ab
我的脚本:
while getopts ":n:f:" opt
do
case $opt in
(n)
argn=$OPTARG
;;
(f)
argf=$OPTARG
;;
esac
done
FOO=${argf:=/etc/passwd}
NR=${argn:=3}
echo " --------- ^$1 -----------"
awk -F':' '/^'"$1"'/ { print $1 }' $FOO | head -n $NR
它仅在我输入时起作用
./script.sh a
或
./script.sh b
(给我以这封信开头的行)。或者当我刚刚输入时
./script.sh -n 5
或
./script -f file.txt
当我想同时使用参数 ($1) 和选项时它不起作用。我该怎么办?
感谢您的回答!
【问题讨论】:
-
@JoachimPileborg optstring 中的前导冒号表示“静默模式”。
-
kk,我修好了,但这不是问题的本质,因为在($1)之前有参数时,脚本仍然“看不到”选项。
标签: bash parameters arguments getopt