这里有很多问题。您需要先解析选项(getopts 循环),然后从参数列表中删除它们(使用shift $(($OPTIND-1))
),然后从 $1 和 $2 获取 FILE1 和 FILE2。其次,您需要告诉 getopts -o 需要一个参数(getopts "o:"
)。第三,您的 getopts 循环应该包括检查无效选项(并且您可能还应该确保指定了 FILE1 和 FILE2)。第四,在检查 $outputfile 是否为空时,需要用双引号将其括起来,然后使用字符串测试(-eq 检查数字是否相等,如果使用它来比较数字以外的任何内容,则会出错)。第五,你应该在文件名两边加上双引号,以防它们中有任何有趣的字符。最后,您尝试执行的实际命令(粘贴、tr 等)没有意义(所以我几乎不理会它们)。这是我重写的镜头:
#!/bin/sh
outputfile=''
while getopts "o:" OPTION
do
case $OPTION in
o)
outputfile="$OPTARG"
;;
[?])
echo "Usage: $0 [-o outfile] file1 file2" >&2
exit 1
;;
esac
done
shift $(($OPTIND-1))
if [ $# -ne 2 ]; then
echo "Usage: $0 [-o outfile] file1 file2" >&2
exit 1
fi
FILE1="$1"
FILE2="$2"
if [ -n "$outputfile" ]; then
cat "$FILE1" | paste - | "$FILE1" - | tr "\t" "\n" | paste "$FILE1" "$FILE2" | tr '\t' '\n' > "$outputfile"
else
cat "$FILE1" | paste - | "$FILE1" - | tr "\t" "\n"
paste "$FILE1" "$FILE2" | tr '\t' '\n'
fi