脚本选项--我们在执行命令时,后边可以跟许多的选项和参数,那么在创建脚本的时候是否也可以在脚本后边跟上不同的选项而执行不同的功能?


目录

  • 处理简单的选项

  • 从参数中分离选项

  • 处理带值的选项


一、处理简单选项

先看下面的一个脚本:

#!/bin/bash
while [ -n "$1" ]
do
    case "$1" in
    -a) echo -a option ;;
    -b) echo -b option ;;
    -c) echo -c option ;;
    *) echo nothing ;;
    esac
    shift
done

由于shift移位命令,无论脚本后边跟多少个选项,都将第一个参数的形式传给脚本,所以执行的效果如下:

脚本中如何加入选项_脚本选项



二、从参数中分离选项

执行脚本的时候,有时候既需要选项,也需要参数,这就要把选项和参数区分开。

#!/bin/bash
while [ -n "$1" ]
do
    case "$1" in
    -a) echo -a option;;
    -b) echo -b option;;
    --) shift
        break;;
    *) echo nothing;;
    esac
    shift
done
for param in "$@"
do
    echo this param is "$param"
done

这个脚本中 -- 作为选项和参数的分割,为了避免shell把 -- 也当做参数来处理,需要在break前加shift把最后一个选项的值丢弃。执行效果如下:

脚本中如何加入选项_shift_02


三、处理带值的选项

有些时候选项也是需要带参数的,这需要让脚本知道什么选项后边应该跟参数

#!/bin/bash
while [ -n "$1" ]
do
    case "$1" in
    -a) echo a option;;
    -b) param="$2"
        echo b option with $param
        shift;;
    --) shift
        break;;
    *) echo nothing;;
    esac
    shift
done
for param in "$@"
do
    echo this is $param
done

-b选项后边需要跟参数赋值给$2,然后需要shift丢弃一个参数,执行效果如下:

脚本中如何加入选项_脚本选项_03