您的位置:

Linux运维工程师的Shell脚本参数处理技巧

一、获取命令行参数

Shell脚本中,可以使用$0、$1、$2、$3......$n来获取命令行参数。其中,$0代表脚本本身,$1代表第一个参数,$2代表第二个参数,$3代表第三个参数,以此类推。

#!/bin/bash
echo "脚本名:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "第三个参数:$3"

当我们执行该脚本并传入参数时,输出结果如下:

$ ./test.sh hello world shell
脚本名:./test.sh
第一个参数:hello
第二个参数:world
第三个参数:shell

二、判断参数个数

在脚本中,我们需要对命令行参数进行校验,确保输入参数个数正确。可以使用"$#"获取参数个数。

#!/bin/bash
if [ $# -ne 2 ]; then
    echo "请输入两个参数"
    exit 1
else
    echo "参数个数正确"
fi

执行脚本,当传入的参数个数不为2时,则输出"请输入两个参数"并退出;否则输出"参数个数正确"。

$ ./test.sh
请输入两个参数

$ ./test.sh hello world
参数个数正确

三、判断参数是否为空

在实际的运维场景中,我们往往需要对输入的参数进行非空校验。可以使用"-z"判断参数是否为空。

#!/bin/bash
if [ -z "$1" ]; then
    echo "参数不能为空"
    exit 1
else
    echo "参数不为空"
fi

执行脚本,当传入的参数为空时,则输出"参数不能为空"并退出;否则输出"参数不为空"。

$ ./test.sh
参数不能为空

$ ./test.sh hello
参数不为空

四、使用长选项

在脚本中,我们往往需要使用一些长选项来使得脚本更加易用。可以使用"getopt"命令来实现。

#!/bin/bash
while true; do
    case "$1" in
        -a | --all)
            echo "显示所有信息"
            shift;;
        -v | --version)
            echo "显示版本号"
            shift;;
        -h | --help)
            echo "显示帮助信息"
            shift;;
        --)
            shift
            break;;
        *)
            echo "未知选项:$1"
            exit 1;;
    esac
done

执行脚本,可以传递"-a"、"--all"来显示所有信息;"-v"、"--version"来显示版本号;"-h"、"--help"来显示帮助信息。如果传递了未知选项,则输出"未知选项:XXX"。

$ ./test.sh -a
显示所有信息

$ ./test.sh -v
显示版本号

$ ./test.sh --help
显示帮助信息

$ ./test.sh -x
未知选项:-x

五、处理命令行参数中的路径

在脚本中,我们往往需要处理命令行参数中的路径。可以使用"readlink"命令来获取路径的绝对路径。

#!/bin/bash
filepath=$(readlink -f $1)
echo "文件路径:$filepath"

执行脚本,输出文件路径的绝对路径。

$ ./test.sh test.txt
文件路径:/home/user/test.txt