Bash 脚本 - getopts 中的最后一个案例未被读取
Bash script - last case in getopts not getting read
我有以下 bash 脚本
#!/bin/bash
id=""
alias=""
password=""
outputDirectory=""
extension=""
function ParseArgs()
{
while getopts "t:a:p:f:r:o:e" arg
do
case "$arg" in
t)
id=$OPTARG;;
a)
alias="$OPTARG";;
p)
password="$OPTARG";;
f)
folderPath="$OPTARG";;
r)
relativeFolderPath="$OPTARG";;
o)
outputDirectory="$OPTARG";;
e)
extension="$OPTARG";;
-) break;;
esac
done
}
ParseArgs $*
echo "Getting all input files from $folderPath"
inputFiles=$folderPath/*
echo "Output is $outputDirectory"
echo "Extension is $extension"
if [[ $extension != "" ]]
then
echo "Get all input files with extension: $extension"
inputFiles = $folderPath/*.$extension
fi
for file in $inputFiles
do
echo "Processing $file"
done
出于某种原因,如果我使用最后一个参数 (-e),它不会被读取。例如,不管有没有最后一个参数 (-e xml),我在下面得到相同的输出,我通过包含 outputDirectory 来测试它以确保它确实被读取。
sh mybashscript.sh -t 1 -a user -p pwd -o /Users/documents -f /Users/documents/Folder -r documents/Folder/a.xml -e xml
Getting all input files from /Users/dlkc6428587/documents/ResFolder
Output is /Users/documents
Extension is
Processing /Users/documents/Folder/a.xml
Processing /Users/documents/Folder/b.xml
真的很奇怪,有人知道我做错了什么吗?谢谢。
你没有指出 -e
在调用 getopts
时在参数后面跟一个冒号:
while getopts "t:a:p:f:r:o:e:" arg
另外,你应该这样调用函数
ParseArgs "$@"
确保正确处理任何包含空格的参数。
最后,inputFiles
应该是一个数组:
inputFiles=( "$folderPath"/*."$extension" )
for file in "${inputFiles[@]}"
do
echo "Processing $file"
done
我有以下 bash 脚本
#!/bin/bash
id=""
alias=""
password=""
outputDirectory=""
extension=""
function ParseArgs()
{
while getopts "t:a:p:f:r:o:e" arg
do
case "$arg" in
t)
id=$OPTARG;;
a)
alias="$OPTARG";;
p)
password="$OPTARG";;
f)
folderPath="$OPTARG";;
r)
relativeFolderPath="$OPTARG";;
o)
outputDirectory="$OPTARG";;
e)
extension="$OPTARG";;
-) break;;
esac
done
}
ParseArgs $*
echo "Getting all input files from $folderPath"
inputFiles=$folderPath/*
echo "Output is $outputDirectory"
echo "Extension is $extension"
if [[ $extension != "" ]]
then
echo "Get all input files with extension: $extension"
inputFiles = $folderPath/*.$extension
fi
for file in $inputFiles
do
echo "Processing $file"
done
出于某种原因,如果我使用最后一个参数 (-e),它不会被读取。例如,不管有没有最后一个参数 (-e xml),我在下面得到相同的输出,我通过包含 outputDirectory 来测试它以确保它确实被读取。
sh mybashscript.sh -t 1 -a user -p pwd -o /Users/documents -f /Users/documents/Folder -r documents/Folder/a.xml -e xml
Getting all input files from /Users/dlkc6428587/documents/ResFolder
Output is /Users/documents
Extension is
Processing /Users/documents/Folder/a.xml
Processing /Users/documents/Folder/b.xml
真的很奇怪,有人知道我做错了什么吗?谢谢。
你没有指出 -e
在调用 getopts
时在参数后面跟一个冒号:
while getopts "t:a:p:f:r:o:e:" arg
另外,你应该这样调用函数
ParseArgs "$@"
确保正确处理任何包含空格的参数。
最后,inputFiles
应该是一个数组:
inputFiles=( "$folderPath"/*."$extension" )
for file in "${inputFiles[@]}"
do
echo "Processing $file"
done