👱
师父,我要给分舵发命令,有时候是打云南,有时候是打神龙岛。总不能每次都重新写一张圣旨(修改脚本)吧?
👳
小宝,这就要用到传递参数。你在发号施令(运行脚本)的时候,顺便带上地名,脚本里用 $1, $2 这种代号就能接住。
🕊️ 飞鸽传书 (传递参数)
在运行脚本时,可以在后面跟上参数,脚本内部用特殊符号接收。
📜 密信代码表
- $0:脚本自己的名字(比如
attack.sh)。 - $1:第一个参数(比如
Yunnan)。 - $2:第二个参数(比如
Island)。 - $#:一共传了多少个参数(兵力总数)。
- $*:所有参数合在一起(展示所有兵力)。
- $?:上一个命令是否成功(0表示成功,非0表示失败)。这叫“探子回报”。
例子: ./attack.sh Yunnan Island
脚本里:echo "攻打 $1" -> 输出:攻打 Yunnan
🏯 排兵布阵 (数组)
如果手下大将太多,一个个起名字(var1, var2...)太麻烦,不如把他们编成一个方阵(Array)。
1. 点将 (定义数组)
用括号包起来,中间用空格隔开。
heros=("陈近南" "韦小宝" "双儿" "阿珂")
2. 调兵 (读取数组)
读取某一个人: ${heros[0]} -> 陈近南
(注意:计算机是从 0 开始数的,不是从 1 开始!)
读取所有人: ${heros[@]}
3. 清点人数 (数组长度)
${#heros[@]} -> 4 (一共4个人)
🖐️ 动手时刻:韦爵爷的点将台
编写脚本 roster.sh,用来管理你的老婆团(数组)和任务(参数)。
- 编写脚本:
#!/bin/bash # 接收任务地点 echo "本次任务地点:$1" # 定义老婆团 wives=("双儿" "沐剑屏" "曾柔" "方怡" "苏荃" "阿珂" "建宁") # 点名 echo "大老婆是:${wives[0]}" echo "最乖的是:${wives[0]}" echo "最凶的是:${wives[6]}" # 全家福 echo "全家都在这:${wives[@]}" echo "一共娶了 ${#wives[@]} 个老婆。" - 运行脚本:
bash roster.sh 扬州
💡 提示:Shell 数组只支持一维数组,别想着搞个二维矩阵排兵布阵,那得用 Python。