我正在为一些无聊且重复的工作编写简单的 Shell 脚本。脚本正确地更改了目录,现在我想根据我在运行脚本时输入的参数运行其他脚本。其他脚本分散在子目录中,每个脚本都是唯一的。所以我想只插入文件名,然后让脚本找出该文件在哪个子目录中。
我尝试了这样的事情:
filename="default.ini"
while [ $# -gt 0 ]
do
case "$1" in
-f) filename="$(find ./ -name $2)"; shift;;
-*) echo >&2 \
"usage: $0 [-v] [-f file] [file ...]"
exit 1;;
*) break;; # terminate while loop
esac
shift
done
echo $filename
但是 find 没有返回任何结果,所以它保留下来default.ini
。还有其他方法可以解决这个问题吗?
答案1
我认为这是解析选项的更惯用的方式:
filename="default.ini"
v_opt=false
while getopts :vf: opt; do
case $opt in
f) find_out=$(find . -name "$OPTARG")
# do something with $find_out, such as checking if it's empty, or
# if more than one file was found ...
[[ $find_out ]] && filename=$(head -n 1 <<< "$find_out")
;;
v) v_opt=true ;;
?) echo "usage: ..."; exit 1;;
esac
done
shift $((OPTIND-1))
echo $filename