脚本专栏 
首页 > 脚本专栏 > 浏览文章

详解shell中脚本参数传递的两种方式

(编辑:jimmy 日期: 2024/11/16 浏览:3 次 )

方式一:$0,$1,$2..

采用$0,$1,$2..等方式获取脚本命令行传入的参数,值得注意的是,$0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用${10},${11}....才能获取到参数,但是一般很少会超过10个参数的情况。

1.1 示例:新建一个test.sh的文件

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

在shell中执行脚本,结果如下

$ ./test.sh 1 2

#shell中将会输出:
脚本./test.sh
第一个参数1
第二个参数2

1.2 下面是参数超过10个的情况,在test.sh文件写入

#!/bin/bash
echo "脚本名$0"
echo "第一个参数$1"
echo "第二个参数$2"
echo "第三个参数$3"
echo "第四个参数$4"
……
echo "第十个参数$10"
echo "第十个参数${10}"

在shell中执行脚本,结果如下

$ ./test.sh a b c d e f g h i j

#shell中将会输出:
脚本名./test.sh
第一个参数a
第二个参数b
第三个参数c
第四个参数d
第五个参数e
第六个参数f
第七个参数g
第八个参数h
第九个参数i
第十个参数a0
第十个参数j

可以看到${10}正确读取到了第十个参数,而$10被分成$1读取到第一个参数a然后拼接字符串0,于是输出a0。

优点:获取参数更容易,执行脚本时需要的输入少

缺点:必须按照顺序输入参数,如果中间漏写则参数对应就会错误

方式二:getopts

语法格式:getopts [option[:]] [DESCPRITION] VARIABLE
 option:表示为某个脚本可以使用的选项
":":如果某个选项(option)后面出现了冒号(":"),则表示这个选项后面可以接参数(即一段描述信息DESCPRITION)
VARIABLE:表示将某个选项保存在变量VARIABLE中

2.1 示例:同样新建一个test.sh文件

while getopts ":a:b:c:" opt
do
 case $opt in
  a)
  echo "参数a的值$OPTARG"
  ;;
  b)
  echo "参数b的值$OPTARG"
  ;;
  c)
  echo "参数c的值$OPTARG"
  ;;
  "未知参数"
  exit 1;;
 esac
done

用一个while循环加case分支获取不同参数,:a:b:c相当于定义参数的变量名,有时候可能会有未知参数,所以增加一个"color: #ff0000">方式三:声明变量 直接引用

先在test1.sh脚本中声明变量AA BB CC DD

AA=11
BB=22
CC=33
DD=44

在test2.sh脚本中引用变量AA BB CC并打印

echo $AA $BB $CC $AA

注意:执行脚本的时候使用(. 脚本名)可以引用脚本外声明的变量,使用(sh 脚本名)不能引用局部之外的变量

上一篇:shell中set指令的用法详解
下一篇:shell字符串截取报错:Bad substitution的解决
一句话新闻
微软与英特尔等合作伙伴联合定义“AI PC”:键盘需配有Copilot物理按键
几个月来,英特尔、微软、AMD和其它厂商都在共同推动“AI PC”的想法,朝着更多的AI功能迈进。在近日,英特尔在台北举行的开发者活动中,也宣布了关于AI PC加速计划、新的PC开发者计划和独立硬件供应商计划。
在此次发布会上,英特尔还发布了全新的全新的酷睿Ultra Meteor Lake NUC开发套件,以及联合微软等合作伙伴联合定义“AI PC”的定义标准。