Shell脚本编程基础第四天之--给脚本传参

177 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情

  • 参照使用c语言代码编写的命令行可执行程序传参语法规范
  • 参数与参数之间、脚本文件名与参数之间使用1个或多个空格分隔
  • $0指代脚本文件本身
  • $1指代命令行上的第1个参数
  • $2指代命令行上的第2个参数,以此类推其他参数的脚本内引用方法
  • $@指代命令行上的所有参数(参数数组)
  • $#指代命令行上的参数个数(参数数组大小)

创建6-2.sh文件,输入以下脚本:vim 6-2.sh

#!/bin/bash
echo $3 # --> results with: banana

BIG=$5

echo "A $BIG costs just $6"

# 输出所有参数
echo "$@"

# 一下代码输出命令行参数的总数
echo $#

直接运行这个脚本(不带任何参数)

image.png

可以看到,任何参数位都没有被输出,并且 输出命令行参数总数 echo "$#"这个命令确实输出了0,代表没有参数。

用调试模式看一眼:bash -x 6-2.sh

image.png

带参数:bash 6-2.sh apple 5 banana 8 "Fruit Basket" 15,要注意:apple是第一个参数

image.png

直接用代码行形式解释:
第一行直接输出 banana,因为脚本写的是 echo $3,代表输出第三个参数,回到命令行第三个参数是:banana
第二行输出的是 A Fruit Basket costs just 15,脚本写的是 echo "A $BIG costs just $6",这里就比较有意思了,$BIG是引用已定义的变量,所以我们回到BIG=$5,找到第5个参数为"Fruit Basket",注意这里是用双引号包起来的,如果不用双引号,那么第5个参数为Fruit;而$6自然而然就是第六个参数 15了
第三行输出所有参数,相当于是把你在命令行的参数再给输出一遍,apple 5 banana 8 Fruit Basket 15,要注意的是,里面的双引号被自动抹除了
第四行输出6,这个没什么好说的,就是命令行敲的所有参数的个数总和。

Shell脚本编程基础第五天之--数组