linux shell的变量分类,bash变量类型及区别之浅谈

本文探讨了本地变量、环境变量和位置变量在Linux shell编程中的作用、范围及用法,重点讲解了如何设置、引用和管理这些变量,并通过实例展示了参数传递的灵活性。同时介绍了如何编写脚本处理不同类型的变量和参数传递,如备份脚本和参数传递的技巧。

变量类型,区别

位置变量$0 $1,$2,$# $@ $*

变量的类型:本地变量、环境变量、位置变量

本地变量:生效范围为当前shell进程,对当前shell之外的其他shell进程包括当前shell的子进程均无效

环境变量:生效范围为当前shell进程及子进程

位置变量:$1,…..$n,${10}来表示,用于放脚本在脚本代码中调用通过命令行传递给它的参数

【本地变量】

变量赋值:name=‘value’,

可以使用引用value:

(1) 可以是直接字串; name=“root"

(2) 变量引用:name="$USER"

(3) 命令引用:name=`COMMAND`, name=$(COMMAND)

变量引用:${name}, $name

"":弱引用,其中的变量引用会被替换为变量值

'':强引用,其中的变量引用不会被替换为变量值,而保持原字符串

显示已定义的所有变量:set

删除变量:unset name

生效范围为当前shell进程,对当前shell之外的其他shell进程包括当前shell的子进程均无效

如下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

编辑一个本地变量:name=mage

echo $mage可查询变量

3c8ce6380daa33c267ccb0e2e66a02de.png

新开一个窗口再次查询就不显示了,这就是本地变量

3c8ce6380daa33c267ccb0e2e66a02de.png

这里我们写一个小脚本验证一下,

第一行是:shell程序开头的环境指定,这里我们用的是bash

第二行是:一些描述信息;本地变量测试脚本

然后定义var1=success

最后这行是为了方便我们下一步测试,让它把这个变量输出到屏幕上

3c8ce6380daa33c267ccb0e2e66a02de.png

给它执行权限,然后用相对路径运行,然后显示出我们脚本里echo打印的信息;但是用echo $var1却没有。

So:本地变量只针对当前环境有效!

3c8ce6380daa33c267ccb0e2e66a02de.png

我们再建立一个var2的脚本,将var1的变量也写进去

3c8ce6380daa33c267ccb0e2e66a02de.png

没有显示var1的变量。

So:本地变量只对当前环境有效

【环境变量】

生效范围为当前shell进程及子进程

显示所有环境变量:

export

env

printenv

删除:unset name

上面我们说过:本地变量只能在当前环境(shell)下使用,

环境变量就是在变量前声明、赋值。加一个字符串:export

图①

3c8ce6380daa33c267ccb0e2e66a02de.png

用之前声明就行

还有一种写法:declare –x等价于export

练习题:

编写脚本/root/bin/backup.sh,可实现将/etc/目录备份到/root/下生成etcYYYY-mm-dd

3c8ce6380daa33c267ccb0e2e66a02de.png

中间的是正文,其他为描述信息

3c8ce6380daa33c267ccb0e2e66a02de.png

有了上下俩行输出信息提示,我们再运行脚本的时候就明白这个脚本是否已经开始和结束了。

【位置变量】

位置变量:在脚本代码中调用通过命令行传递给脚本的参数

$1, $2, …:对应第1、第2等参数,shift [n]换位置

$0: 命令本身

$*: 传递给脚本的所有参数,全部参数合为一个字符串

$@: 传递给脚本的所有参数,每个参数为独立字符串

$#: 传递给脚本的参数的个数

$@ $* 只在被双引号包起来的时候才会有差异

上题,如备份,用起来不灵活,如果我想要备份别的目录呢?或者备份到别的地方呢?

想要灵活就需要参数

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

新建f1脚本。 把f1的参数作为f2的参数 一个用$*一个用$@。 当我们执行f1.sh脚本的时,f2.sh脚本会调用f1.sh后跟的参数。简单讲就是上一个脚本参数的调用。

结果如下图:

3c8ce6380daa33c267ccb0e2e66a02de.png

$1(引用第一个参数)打印出来的是全部

$2(引用第二个参数)打印出来的是空

因为$*调用的参数是一个整体(多个字符)

所以第一个参数就是“a b c d”第二个参数自然就没有了

$@调用的参数是单个参数(字符)

3c8ce6380daa33c267ccb0e2e66a02de.png

当我们把$*和$@的双引号去掉后就没区别了

为被双引号引用时,所有的参数被认为是各个独立的单词

第十个参数怎么写?

${10}如果写成$10,系统会认为是$1和0的组合

3c8ce6380daa33c267ccb0e2e66a02de.png

第十个参数是$10,然后结果是:a0

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

当加上大括号的时候就显示正确了

原创文章,作者:cszdz123,如若转载,请注明出处:http://www.178linux.com/33291

内容概要:本文介绍了一个基于MATLAB实现的无人机三维路径规划项目,采用蚁群算法(ACO)与多层感知机(MLP)相结合的混合模型(ACO-MLP)。该模型通过三维环境离散化建模,利用ACO进行全局路径搜索,并引入MLP对环境特征进行自适应学习与启发因子优化,实现路径的动态调整与多目标优化。项目解决了高维空间建模、动态障碍规避、局部最优陷阱、算法实时性及多目标权衡等关键技术难题,结合并行计算与参数自适应机制,提升了路径规划的智能性、安全性和工程适用性。文中提供了详细的模型架构、核心算法流程及MATLAB代码示例,涵盖空间建模、信息素更新、MLP训练与融合优化等关键步骤。; 适合人群:具备一定MATLAB编程基础,熟悉智能优化算法与神经网络的高校学生、科研人员及从事无人机路径规划相关工作的工程师;适合从事智能无人系统、自动驾驶、机器人导航等领域的研究人员; 使用场景及目标:①应用于复杂三维环境下的无人机路径规划,如城市物流、灾害救援、军事侦察等场景;②实现飞行安全、能耗优化、路径平滑与实时避障等多目标协同优化;③为智能无人系统的自主决策与环境适应能力提供算法支持; 阅读建议:此资源结合理论模型与MATLAB实践,建议读者在理解ACO与MLP基本原理的基础上,结合代码示例进行仿真调试,重点关注ACO-MLP融合机制、多目标优化函数设计及参数自适应策略的实现,以深入掌握混合智能算法在工程中的应用方法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值