Bash脚本-如何在使用getopts时逐行读取文件



我想在这个脚本中做两件事:1) 将文件名传递给脚本2) 将选项传递给脚本

示例1:$./test_script.sh file_name_to_be_read只将文件名传递给脚本

示例2:$./test_script.sh -a -b file_name_to_be_read将文件名和选项传递给脚本

我能够使用以下代码使示例1工作:

while read -r line ; do
    echo $line
done

在示例2中,我想添加如下附加标志:

while getopts "abc opt; do
    case "$opt" in
    a) a=1
       echo "a is enabled"
       ;;
    b) b=1
       echo "b is enabled"
       ;;
    esac
done

但是,我如何使file_name成为强制性的,并在有或没有选项的情况下使用?

getopts仅解析选项(以-开头的参数);其他论点就不提了。参数OPTIND告诉您尚未查看的第一个参数的索引;通常在此之前放弃选项。

while getopts "ab" opt; do
    case "$opt" in
    a) a=1
       echo "a is enabled"
       ;;
    b) b=1
       echo "b is enabled"
       ;;
    esac
done
shift $((OPTIND - 1))
echo "$# arguments remaining"
for arg in "$@"; do
    echo "$arg"
done

前面的,如果称为bash tmp.bash -a -b c d e,则产生

$ bash tmp.bash -a -b c d e
a is enabled
b is enabled
3 arguments remaining:
c
d
e

最新更新