我想写一个脚本,当用户输入包含一个不是文件的参数时,会显示一条错误消息。
例如:
./script.sh test.pdf test1.pdf test2.pdf
应该可以正常工作。
但:
./script.sh test.pdf test1.pdf notAfile
应显示错误消息。
脚本应该容忍你可以放在文件之前的[-b int]选项。
例如
./script.sh -b 5 test.pdf test1.pdf test2.pdf
应该运行正常
答案 0 :(得分:3)
The -b
parameter makes it a bit tricky. Here's a portable way to do it:
b_seen=
b=
for arg; do
if test "$b_seen"; then
b="$arg"
b_seen=
elif test "$arg" = -b; then
b_seen=yes
elif test ! -f "$arg"; then
echo error: not a file: $arg
fi
done
It has a limitation: if there are multiple -b, the last will overwrite previous
答案 1 :(得分:2)
对于命令行参数解析,请检查getopt。例如:
args=($(getopt -u '-o b:' -- $@))
files=false
for i in "${args[@]}"; do
$files && [ ! -f "$i" ] && echo "File not found: $i"
if [ "$i" == '--' ]; then files=true; fi
done