bash检查输入是否包含文件

时间:2015-12-14 17:24:01

标签: bash shell unix sh

我想写一个脚本,当用户输入包含一个不是文件的参数时,会显示一条错误消息。

例如:

./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

应该运行正常

2 个答案:

答案 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