获取参数
向shell脚本传递数据的最基本方式是使用命令行参数。
linux执行命令:./init.sh a b c d
代码:
#! /bin/sh
echo "参数1:"$1
echo "参数2:"$2
echo "参数个数:"$#
-
读取输入参数
读取输入的参数的变量为位置参数,位置参数通过标准数字表示,
其中$0为程序名称,$1为第一个参数,$2为第二个参数,依次类推,直到$9为第九个参数。
shell脚本自动将命令行参数赋值给各个位置变量。同时输入多个参数可以是数值也可以是字符串时,必须使用空格分隔要想在参数值中包含空格,就必须使用单引号或双引号
当参数多于9个后,必须在shell脚本内使用大括号将变量括起来,如${10}
。从而可以使用任意个参数。 -
读取程序名称
传递给变量$0的字符串实际上是程序的路径根据调用方法决定是相对还是绝对路径。
使用basename命令可以去掉路径前缀,只获得程序名称名字中不可以有空格。
获取选项
在Linux系统中,许多命令都提供了选项,使用不同的选项就会得到不通的执行结果
例如:ls命令,ls命令提供了多个选项:-l、-a、-A、-h、-i等等,每个选项具有不同的功能,我们自己写脚本时也可以定义选项。
1.getopts命令的如何使用:
用getopts命令获取到脚本选项后,getopts会将获取到的选项所对应的参数(选项对应的参数,并不是选项本身,有的命令选项后面是需要跟一个参数的,例如tcpdump 的-w选项,后面需要指定一个文件来保存抓包数据)自动保存到OPTARG这个变量中。
getopts命令格式:getopts OPTSTRING VARNAME
OPTSTRING:告诉getopts会有哪些选项和参数(用选项后面加“:”来表示选项后面需要加参数)
VARNAME:保存getopts获取到的选项
#! /bin/sh
host=`ip addr | grep /24 | awk '{print $2}' | awk -F '/' '{print $1}'`
context="HOST="$host"\n"
while getopts "t:i:p" opt; do
case $opt in
t)
context=$context"CONSUL_CHECK_TYPE="$OPTARG"\n" #参数存在$OPTARG中, 注意是OPTARG大写
;;
i)
context=$context"CONSUL_CHECK_IP="$OPTARG"\n"
;;
p)
context=$context"CONSUL_CHECK_PORT="$OPTARG"\n"
;;
esac
done
echo -e $context > /var/www/.env