Shell学习(2/6) 传递参数-数组

Shell——函数参数传递 上述 getopts 后面的 “s:k:y:” 是用户可以给函数提供的选项参数,每个参数还都可以含有参数,因为他们后面都加了 “:”,这个参数会被存到 系统变量 $OPTARG 中。getopts 是 bash 内置的一个命令,通过该命令,用户可以获取函数的选项以及参数值,或者是脚本的命令行选项以及参数值。可以发现,上述的变量 var 的值 是另一个变量(name)的变量名,,此时 可以通过两种方法来引用第二个变量。用户可以通过 系统变量 $# 来获取脚本的参数的个数,当然,函数也是。 阅读详情

三、shell 传递参数

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为 $n,n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数。

3.1 传递参数的基本方法

./script.sh arg1 arg2 arg3

3.2 脚本中访问参数

3.2.1 位置参数:

  • $0:表示脚本名称或命令名。
  • $1, $2, ...:表示第一个、第二个等位置参数。
  • $#:表示传递给脚本的参数个数。
  • $\*:将所有参数作为一个整体返回,参数之间用一个空格分隔。
  • "$@":将所有参数分别返回,参数之间保留独立性。

示例脚本:

#!/bin/bash
echo "脚本名称: $0"
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "参数个数: $#"
echo "所有参数(*): $*"
echo "所有参数(@): $@"

3.2.2 参数处理的区别:

  • $* 和 $@ 的区别在于它们在被双引号包裹时的行为:
    • $* 会将所有参数视为一个整体。
    • $@ 会将每个参数保留独立性。
./script.sh "arg 1" "arg 2"

脚本中:

  • $* 的结果是:arg 1 arg 2(参数合为一个字符串)。
  • $@ 的结果是:arg 1 和 arg 2(参数独立保留)。

3.3 特殊变量

  • $?:表示上一个命令的退出状态(返回值)。
  • $$:表示当前脚本的进程 ID。
  • $!:表示最后一个后台运行的进程 ID。

四、Shell 数组

数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。
与大部分编程语言类似,数组元素的下标由 0 开始。

4.1 声明数组

  • 显式声明:
array_name=(value1 value2 value3)
  • 单独赋值:
array_name[0]=value1
array_name[1]=value2
array_name[2]=value3

示例

my_array=("Apple" "Banana" "Cherry")
my_array[3]="Date"

4.2 访问数组元素

通过数组的索引访问元素,索引从 0 开始。

访问单个元素

echo ${array_name[0]}  # 输出第一个元素

访问所有元素

  • 使用 \* 或 @:
echo ${array_name[*]}  # 输出所有元素为一个字符串
echo ${array_name[@]}  # 输出所有元素,保留独立性

获取数组长度

echo ${#array_name[@]}  # 获取数组长度

4.3 修改数组元素

直接使用索引即可修改:

array_name[1]="NewValue"

4.4 删除数组元素

  • 删除单个元素:
unset array_name[index]

  • 删除整个数组:
unset array_name

4.5 遍历数组

通过循环可以遍历数组的元素。

示例:使用 for 遍历

my_array=("A" "B" "C" "D")

for item in "${my_array[@]}"; do
  echo $item
done

使用索引遍历

for i in "${!my_array[@]}"; do
  echo "Index $i: ${my_array[i]}"
done

在这里插入图片描述

4.6 示例脚本

#!/bin/bash

# 定义数组
fruits=("Apple" "Banana" "Cherry")

# 添加新元素
fruits[3]="Date"

# 输出数组所有元素
echo "所有水果: ${fruits[@]}"

# 输出数组长度
echo "数组长度: ${#fruits[@]}"

# 遍历数组
for fruit in "${fruits[@]}"; do
  echo "水果: $fruit"
done

# 修改数组元素
fruits[1]="Blueberry"
echo "修改后: ${fruits[@]}"

# 删除某个元素
unset fruits[2]
echo "删除后: ${fruits[@]}"

4.7 注意事项

  • Shell 数组的索引是非连续的,删除某些元素后,索引不会自动重排。
  • Shell 不支持多维数组。
Shell 传递参数和Shell 数组 阅读详情

相关推荐

Shell脚本中参数传递方法详解

本文介绍了Shell脚本中常见的参数传递方法,包括位置参数传递、命名参数传递(使用getopt命令和getopts命令)以及环境变量传递。这些参数传递方法使得Shell脚本能够根据外部提供的参数执行相应的操作,增强了脚本的灵活性和可重用性。通过参数传递,我们可以在执行Shell脚本时向脚本传递一些数据或选项,以便脚本能够根据这些参数执行相应的操作。本文将介绍Shell脚本中常见的参数传递方法,并提供相应的示例代码。下面分别介绍这两种方法。在脚本中,可以使用特殊变量来获取环境变量的值,例如$VAR。

HackDashX的博客 838

Shell脚本传递参数的4种方式(位置参数、特殊变量、环境变量和命名参数)实例说明

Shell脚本传递参数的4种方式(位置参数、特殊变量、环境变量和命名参数)实例说明

ken2232的博客 3万+

(21)Shell脚本【参数传递一】

A、Shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 处理,shell是一个命令解释器,是一个工具箱, Shell 将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户;B、Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。

m0_46498597的博客 210

shell 传递参数

Linux shell 传递参数

mixboot 2788

Linux 中 Shell 脚本中普通参数传递、数组参数传递、特殊参数传递及基本运算等相关总结和实现

Linux 中 Shell 脚本中普通参数传递、数组参数传递、特殊参数传递及基本运算等相关总结和实现。

代码讲故事 1632

嘉立创EDA实战:从点亮第一盏灯到完成首块PCB

本文详细介绍了使用嘉立创EDA从点亮第一盏LED灯到完成首块PCB的全过程。通过实战案例分享,包括原理图绘制、PCB设计、DRC检查、覆铜操作等关键步骤,帮助电子设计爱好者快速掌握嘉立创EDA的使用技巧,并避免常见的设计错误。

weixin_30314793的博客 372

Linux Shell编程之数组及参数传递

1、Shell数组 Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小,数组元素的下标由 0 开始,下标可以是整数或算术表达式,其值应大于或等于 0。 1.1、定义数组 语法 数组名=(值1 值2 … 值n) 或者 数组名=( 值1 值2 … 值n) 或者 数组名[下标]=值 注:可以不使用连续的下标,而且下标的范围没有限制 在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开 案例 自定义一个数组 [root@root test02]# vi.

itbestboy的博客 5745

Exposure Fusion

MertensTMO原理详解: 文章:2007年Exposure Fusion 论文链接:http://ntp-0.cs.ucl.ac.uk/staff/j.kautz/publications/exposure_fusion.pdf 论文代码:C版本:https://github.com/JawThrow/ExposureFusion python版本:https://github.com/lzocro/Exposure-Fusion matlab版本:https://github.com/Mericam

大长腿不解释 1652

Shell系统学习之向Shell脚本传递参数

Shell传参

MashiMaroJ的专栏 8719

ADS2023实战:2.4GHz超外差接收机从设计到链路预算全流程解析

本文以ADS 2023软件为平台,详细解析了2.4GHz超外差接收机从核心指标定义、架构原理到完整链路搭建与仿真的全流程。通过实战演练,重点阐述了如何利用ADS进行谐波平衡仿真和链路预算分析,以量化评估系统增益、噪声系数等关键性能,为射频工程师提供了一套从理论到仿真的系统级设计方法。

herb5的博客 817

opencode : 无法将“opencode“项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案

opencode命令识别问题与openclawcodexgemini确保的路径在 PATH 中。这个知识对所有 npm 全局工具通用。

一键难忘的博客 4520

【Shell学习笔记】3.Shell 传递参数及数组

本章介绍Shell的传递参数和数组。

qq_62052372的博客 1738

java零基础从入门到精通(全)

目录前言1. 入门知识1.1 java体系1.2 JDK/JRE/JVM区别1.3 编译与运行理解1.4 类体函数细节2. 标识符 前言 java优势 健壮性(JVM(C++语言写的一个虚拟的计算机)、GC(垃圾回收机制)) 多线程并发 可移植性/跨平台 1. 入门知识 1.1 java体系 JavaSE:标准版 JavaEE:企业版 JavaME:微型版 1.2 JDK/JRE/JVM区别 JVM是不能独立安装的。 JRE和JDK都是可以独立安装的 层层嵌套,jvm包括jdk,jdk包括jre

码农研究僧的博客 6万+

Shell 向函数传数组参数和返回数组

如果将数组变量作为函数的参数,函数只会取数组变量的第一个值 testArray(){ echo "函数入参为:$@" } myarray=(1 2 3 4) echo "原始数据为:${myarray[*]}" testArray $myarray ![结果](https://img-blog.csdnimg.cn/20200811222225305.png) 解决办法 将数组变量的值分解成单个的值,然后将这些值作为函数的参数使用。 在函数内部,将所有的参数重新组合成一个新的变量

王小胖的博客 7191

Windows原生与WSL2环境下OpenClaw性能与兼容性的对比分析研究

本文对比分析了Windows原生环境与WSL2环境下运行OpenClaw的性能与兼容性。Windows原生环境提供深度系统集成、图形界面支持和硬件加速优势,适合需要Windows生态集成的用户;WSL2则提供接近原生Linux的性能体验,兼容Linux工具链,适合开发者和跨平台需求。文章详细介绍了两种环境下的推荐硬件配置、系统版本选择及必备工具,并提供了具体的部署步骤指南。研究表明,两种环境各有适用场景,用户可根据需求选择最适合的部署方式。

一键难忘的博客 1218

基于STM32设计的便携式心电信号监测系统_474

本课题设计并实现了一种基于STM32单片机的便携式心电信号监测系统。系统以STM32F103C8T6为核心控制单元,结合PulseSensor心率传感器,实现对人体心率信号的采集与处理。通过单片机内部ADC模块对传感器输出的模拟电压信号进行采样,并对采集数据进行分析处理,从而计算得到实时心率值。

159

shell中的数组作为参数传递

数组做参数的关键:   一、测试脚本 #!/bin/bash echo $1 echo $2 echo $3 echo $4 echo $5 echo $6 echo $7 echo $8 echo $9 echo $10     二、构造数组 atest=("a" "bb cc" "dd ee ff" "gg hh ii jj")   三、测试 atest

MyDriverC 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Shell 传递参数

通过以上分析,Shell 脚本参数传递包括基本位置参数、特殊参数和高级选项解析。基本用法简单易懂,适合初学者;特殊参数如$#$*$@提供了灵活的处理方式;getopts则适用于复杂场景。用户可以根据需求选择合适的方法。部分内容概要基本用法使用$n访问参数,$0为脚本名特殊参数$#(参数个数)、$*(所有参数字符串)、$@(所有参数数组)、(退出状态)高级用法使用getopts解析选项和参数注意事项$n中n必须是数字,n >= 10时需使用${n}

likuoelie的博客 1045

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

shell 传递参数和数组

在学习了shell脚本语言的变量后我们继续学习shell的参数传递和数组,shell脚本的参数传递和我们的c/c++参数传递一样,紧跟着可执行文件后面空格后输入即可,但是程序语言是怎么写的呢? 下面我们来看看shell脚本传递参数的语言编写和使用:1、参数传递: 执行结果: 这里说明一下,执行shell脚本的两种方法会导致输出的$0不同,意思是一样的!2、数组: 执行结果: 我

magiclyj的博客 3164

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

shell 函数传递参数的几种方式

1.最近总结了shell中 function的传递变量的几种方式 1.传递单个变量 2.传递数组变量 #!/bin/bash #trying to pass an variable. function func() { echo "The number of parameters is: ${#}" for line in "$@" do echo ...

weixin_30273501的博客 5471

Shell脚本 ——传递参数

在Shell脚本中,参数传递和获取是编写脚本的重要组成部分。通过命令行将参数传递给脚本,然后在脚本中使用位置参数和特殊参数来引用和处理这些参数。

Darrich的博客 1587

PHP传递数组格式参数到shell脚本中

八重樱:怎么从一名码农成为架构师的必看知识点:目录大全(不定期更新)​ 我的官方群点击此处。 PHP中传递类似于“数组”格式数据到shell脚本中: 模拟场景1 计算捆绑商品的价格,捆绑商品中包含多个商品,这个商品是不确定的,我们暂时定义为苹果、栗子、香蕉,价格分别为8元/斤、10元/斤、3元/斤,重量规格定为500g,我们把价格当做参数传递给shell脚本计算总价格 以下是关于PHP部分...

weixin_43814458的博客 542

Shell脚本传递包括集合在内的多个参数

最近运行一个实验遇到一个小问题,需要传递训练集名称和测试集名称到一个shell脚本。训练集只有一个,所以比较好传递,但是测试集有好几个,我把它们放在一个字符串数组里传递,但是Shell脚本内对这个数组进行遍历的时候却只能得到第一个数组元素。 狗了一下,发现很多人是只传一个数组进脚本,而不是像我这样不仅传数组参数还传单个参数,所以自己结合狗出来的结果试了一下,方法如下: 我们有个main脚本: ...

天帝帝释天的专栏 3353

shell 语法:变量、字符串、数组、注释、传递参数与特殊字符

shell变量、字符串、数组、注释、传递参数与特殊字符

阿飞的博客 2925
上一篇: Shell学习(1/6) 教程-变量
下一篇: Shell学习(3/6) 运算符-echo命令
_蓝橙
博客等级 码龄7年 1179粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值