CentOS下Shell脚本参数传递,centosshellgetopts的ba


1. shell脚本的默认变量

下面用一个shell脚本来描述shell脚本的默认变量[ouyangyewei@localhost workspace]$ cat learn_argument.sh#! /bin/bash## check arguments##-----------------if [ $# -lt 3 ]thenecho "Error! Not Enough Arguments."echo "$0 $@"exit 1fi#-----------------func() {return 1;}funcecho '"$?" : ' "$?" # result from funcecho '"$0" : ' "$0"echo '"$1" : ' "$1"echo '"$2" : ' "$2"echo '"$3" : ' "$3"echo '"$@" : ' "$@"echo '"$#" : ' "$#"echo '"$$" : ' "$$"echo '"$?" : ' "$?" # result from last one : "$$"执行结果如下:[ouyangyewei@localhost workspace]$ sh learn_argument.sh ouyangyewei yihaodian 23"$?" : 1"$0" : learn_argument.sh"$1" : ouyangyewei"$2" : yihaodian"$3" : 23"$@" : ouyangyewei yihaodian 23"$#" : 3"$$" : 3208"$?" : 0对照上面的脚本以及执行结果,可以比较好地理解如下shell脚本的默认变量: 1.$0代表执行脚本的名字 2.$1、$2、$3分别代表各个顺序的参数(第一个参数、第二个参数以及第三个参数) 3.$@代表$1、$2、$3之意,每个变量都是独立的(用双引号括起来) 4.$#代表参数的个数 5.$$代表当前脚本的运行进程ID(PID) 6.$?代表执行完上一个指令的执行结果(如上面脚本,仔细对比两个$?,前者的值来自执行func,后者的值来自执行echo '"$$" : ' "$$")

2. shell脚本命令行参数

2.1.getopts简介

getopts是shell内建命令,可用来解析命令行参数。getopts的bash语法如下:

getopts optstring name [args]

optstring optstring包含了需要识别的选项字符串 1. 若optstring是以冒号开头,意味着进入slient error模式(getopts本身的报错 ,譬如缺少参数或非法选项等的报错;slient模式下不打印报错信息,但却会将错误信息输出到OPTARG中;非slient模式下会向错误输出打印报错信息) 2. 若一个选项字符是以冒号结尾,说明这个字符代表的选项需要接收参数; 3. 若一个选项字符不以冒号结尾,说明这个字符代表的选项不接收参数; 选项与参数之间以空格分隔;

OPTARG 代表当前选项的参数值

更详细的用法可以参考man getopts,下面将以一个案例讲述getopts的用法。

2.2. 案例分析

邮件预警功能中,包含了邮件的发送者、接受者、抄送者、邮件主题以及邮件内容。 其中,抄送者是可选的,也就是在执行脚本时,如果不指定抄送者,就不将邮件抄送给任何人。

如下的shell脚本实现了上述邮件预警功能:

[ouyangyewei@localhost workspace]$ cat email_alert.sh

#! /bin/bash

###############################################

# File: check_path

# Description: 验证给定的路径,

# 若存在,则返回1;

# 否则返回0,并邮件告知

#

# Usage: sh check_path

# -p path_need_to_check

# -f from@email

# -t to@email

# [-c cc@email ]

#

# author: ouyangyewei@yhd.com

# date: 2015-10-26

###############################################

#

# 检查入参

#

#---------------------------------------------

if [ $# -lt 3 ]

then

echo "Error! Not Enough Params."

echo "Usage : sh check_path -p path_need_to_check -f from@email -t to@email [-c cc@email]"

exit 1;

fi

#---------------------------------------------

#

# 定义变量

#

#---------------------------------------------

path=0; # path need to check

from=0; # email sender

to=0; # email receiver

cc=0; # email carbon copy

#---------------------------------------------

#---------------------------------------------

#

# 解析入参

#

#---------------------------------------------

# optstring是"p:f:t:c:",字符串optstring没有以冒号开头,

# 说明不进入slient error模式,如果getopts执行时有报错,

# (譬如非法选项,错误参数等),会向错误输出打印错误信息。

#

# 另外p,f,t,c都是选项,每个选项后面都有冒号,

# 说明这四个选项都需要接收参数。

#

# OPTARG记录当前选项的参数值。

#

while getopts "p:f:t:c:" opt

do

case $opt in

p) #set option "p"

path=$OPTARG

;;

f) #set option "f"

from=$OPTARG

;;

t) #set option "t"

to=$OPTARG

;;

c) #set option "c"

cc=$OPTARG

;;

*)

echo "-$opt not recognized"

;;

esac

done

echo "path : $path"

echo "from : $from"

echo "to : $to"

echo "cc : $cc"

执行结果如下:

[ouyangyewei@localhost workspace]$ sh email_alert.sh

Error! Not Enough Params.

Usage : sh check_path -p path_need_to_check -f from@email -t to@email [-c cc@email]

[ouyangyewei@localhost workspace]$ sh email_alert.sh

> -p /user/hive/warehouse/pms.db/pms_tp_config

> -f alert@yhd.com.cn

> -t ouyangyewei@foxmail.com

path : /user/hive/warehouse/pms.db/pms_tp_config

from : alert@yhd.com.cn

to : ouyangyewei@foxmail.com

cc : 0

其中,上面并没有指定cc参数,所以cc得到的是脚本里面指定的默认值0

相关内容

    暂无相关文章