bash使用getopts

脚本使用的例子

./foo.sh -v -r /home/ -s /home/user/file ./foo.sh -r /home/ -s /home/user/file 

在参数中,我总是需要一个文件或文件夹来扫描数据库的文件(-s数据库文件)

在foo.sh里面

 function entrance() { while getopts "v:r:s" opt; do case $opt in v) echo "-v was triggered, Verbose mode" >&2 ;; r) echo "-r was triggered, recursive mode: $OPTARG" >&2 ;; s) echo "-s was triggered, DATABASE: $OPTARG" >&2 ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; :) echo "Option -$OPTARG requires an argument." >&2 exit 1 ;; esac done } 

我不知道为什么它不起作用。

请修理我

谢谢

调用函数时,您可能已经忘记了$ @。 看到这个:

 #!/bin/bash function entrance() { while getopts "v:r:s" opt; do case $opt in v) echo "-v was triggered, Verbose mode" >&2 ;; r) echo "-r was triggered, recursive mode: $OPTARG" >&2 ;; s) echo "-s was triggered, DATABASE: $OPTARG" >&2 ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; :) echo "Option -$OPTARG requires an argument." >&2 exit 1 ;; esac done } entrance "$@" 

还有一些解释: 在bourne shell的用户自定义函数中使用getopts