🐉

排兵布阵:飞鸽传书

🐉

第十八回:韦小宝飞鸽传密信,陈近南点将排座次

👱

师父,我要给分舵发命令,有时候是打云南,有时候是打神龙岛。总不能每次都重新写一张圣旨(修改脚本)吧?

👳

小宝,这就要用到传递参数。你在发号施令(运行脚本)的时候,顺便带上地名,脚本里用 $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,用来管理你的老婆团(数组)和任务(参数)。

  1. 编写脚本:
    #!/bin/bash
    # 接收任务地点
    echo "本次任务地点:$1"
    
    # 定义老婆团
    wives=("双儿" "沐剑屏" "曾柔" "方怡" "苏荃" "阿珂" "建宁")
    
    # 点名
    echo "大老婆是:${wives[0]}"
    echo "最乖的是:${wives[0]}"
    echo "最凶的是:${wives[6]}"
    
    # 全家福
    echo "全家都在这:${wives[@]}"
    echo "一共娶了 ${#wives[@]} 个老婆。"
                        
  2. 运行脚本:
    bash roster.sh 扬州

💡 提示:Shell 数组只支持一维数组,别想着搞个二维矩阵排兵布阵,那得用 Python。