Linux之shell脚本基础

本文详细介绍了Shell脚本中的各种变量类型及其使用方法,包括环境变量、本地变量、位置变量和特定变量参数。阐述了如何设置、读取、组合和删除变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介及分类

变量:

变量可以定制本身的工作环境。使用变量可以保存有用的信息,是系统获取用户相关的设置,变量也用于保存暂时信息。

 

在默认情况下,所有变量都被看做字符串并以字符串来存储,即使它们被复制为数值时也是如此

 

变量赋值

1.      赋值等号两边不能有空格

2.      字符串通常放在双引号中,以防止被空白字符分开,同时又允许$扩展

分类:

四种变量:环境变量、本地变量、位置变量、特定变量参数

 

环境变量可作用于所有子进程

本地变量在用户现在的shell生命期的脚本中使用,仅存在于当前进程

位置变量:作为程序参数

特定变量:特殊作用

 

环境变量

环境变量

可在命令行中设置,但是用户注销时值将丢失

最好在.profile中设置

系统管理员可在/etc/profile中设置

设置环境变量

$var-Name=value

$export var-Name

【退出登陆后也丢失】

或者

$export MYNAME=”ken”

显示环境变量

$echo $var-Name

建议加{}

查看所有环境变量

$env

消除环境变量

$unset  var-Name

修改环境变量

$MYNAME=”tom”

 

嵌入shell变量[预留变量名,不做其他用途]

CDPATH

 

EXINIT

 

HOME

当前用户主目录【家目录】

IFS

输入域分隔符。当shell读入输入时,它给出的分割单词的一组字符。通常是空格、制表符及换行符

LOGNAME

当前用户的登录名

MAIL

 

MAILCHECK

每隔多少秒检查是否有新的信件

MAILPATH

 

PATH

决定了shell将到哪些目录中寻找命令或程序,执行命令时所搜寻的目录

冒号分隔,用来搜索命令的目录列表

PS1

基本命令提示符,对于root用户是#,对于普通用户是$【在命令列时的提示号】

PS2

附属二级提示符,默认是“>”,当命令尚未打完时,Shell要求再输入时的提示号

SHELL

当前用户Shell类型 

TERMINFO

 

TERM

 

TZ

时区

EDITOR

 

PWD

 

PAGER

 

MAINPATH

man 指令的搜寻路径

USER

 

 

本地变量

本地变量

本地变量在用户现在的Shell生命周期中使用,只在用户当前Shell生命期有意义,若在shell中启动另一进程或者退出,此值将无效

优点:用户不能对其他地Shell或进行设置此变量有效

设置方式:

$Var-name=value

或者

${Var-name=value}

若取值包含空格,可用双引号引起

 

例子:

$GREAT=”12345”

$echo $GREAT

$echo ${GREAT}

Var-Name=value

赋值

Var-Name+value

若设置了,重新赋值,否则赋值

Var-Name:?value

若未设置,显示未设用户错误信息

Var-Name?value

若未设置,显示系统错误信息

Var-Name:=value

若未设置,设置

Var-Name:-value

同上,但取值并不设置到var-Name,可以被替换

使用declare

declare [option] Var-name=value

-a 

to make NAMEs arrays (if supported) 数组

-f

to select from among function names only

-F

to display function names (and line number and source file name if

debugging) without definitions

-i

to make NAMEs have the `integer' attribute 整型

-r

to make NAMEs readonly

只读变量(值不可改变,可保证关键值不被覆盖,不仅可以标识变量,还可以标识数组,定义 declare -r

-t

to make NAMEs have the `trace' attribute

-x

to make NAMEs export 等价于export

例子:

declare -a array

array[0]=jack

 

array2=(tomcat Java MySQL)

 

消除变量

$unset variable-name

 

例子:

$PC=”enterprise”

$unset PC

$echo $PC

显示所有本地shell变量

$set

结合变量值(将变量并排)

$echo ${v1}${v2}

测试变量是否取值:

$unset tom

$echo “${tom:?}”    //若未设置返回系统错误信息

$echo “${tom:?”MyErrorMsg”}”  //未设置返回自定义错误信息

 

$echo “The sky is ${COLOUR:-grey} today” //若未设置,使用grey,之后COLOUR仍未设置

$ehco “The sky is ${COLOUR:=grey} today” //若为设置,设置之,之后,COLOUR有值

 

使用变量保存系统命令参数

$SOURCE=”/etc/passwd”

$DEST=”/tmp/passwd.bak”

$cp $SOURCE $DEST

将变量设置为只读[不能再后期改变之]

$var-Name=value

$readonly var-Name

   

 

位置变量

位置变量

执行脚本时向其传递参数,或传递给函数的

可传递多个,但是使用位置变量参数只能访问前9个,使用shift命令可以改变这个限制.

脚本名称 A   B   C   D   E   F

$0   $1  $2  $3  $4  $5  $6

 

$0表示当前执行的进程名,script本身的名字,或者在正则表达式中表示整行输出

 

特定位置变量参数

特定位置变量参数

运行时脚本的一些相关信息

$0

shell脚本名称

$#

传递到脚本的参数个数

$$

shell脚本运行的当前进程ID号【程序的PID

$!

后台运行的最后一进程的进程ID号【执行上一个指令的PID

$*

以一个单字符串显示所有想脚本传递的参数,与位置变量参数不同,此项参数可超9个【程序的所有参数】,各个参数之间使用环境变量IFS的第一个字符分隔开

$@

是$*的一种精巧变体,不适用IFS环境变量。但是使用时加引号,并在引号中返回每个参数

%@和$*的区别在于,

$@表示真正的参数,包括含有空格的参数;以(“$1 $2...”)的形式保存所有输入的命令行参数

$*只是表示命令行上出现的单词;以(“$1”,“$2”...)的形式保存所有输入的命令行参数

没有特别要求,使用$@

$-

显示shell使用的当前选项,与set命令功能相同

$?

显示最后命令的退出状态,0表示成功,其他值表示出错【执行上一个指令的返回值

 

用于检查上一个命令,函数或者脚本执行是否正确.(在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错.)

$_

保存之前执行的命令的最后一个参数

 

附注:环境变量的设置及修改

附注:环境变量的设置及修改

Bash启动时读取以下文件

/etc/profile

~/.bash_profile

~/.bashrc

方法一:修改/etc/profile文件

作用范围:对所有用户生效(永久的)

适用场景:你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。

 

步骤:

(1)用文本编辑器打开/etc/profile

(2)在profile文件末尾加入所需环境变量

export JAVA_HOME=/usr/share/jdk1.5.0_05

export PATH=$JAVA_HOME/bin:$PATH

(3)重新登录 

注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效

 

注意:

a.      linux下用冒号“:”来分隔路径

b.      大小写必须严格区分

c.      在设置环境变量时特别要注意不能把原来的值给覆盖掉了,这是一种常见的错误。需引用&添加

方法二:修改用户目录下的.bash_profile文件中增加变量

作用范围:对单一用户生效(永久的)

适用长江:这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了。

 

步骤:

(1)    用文本编辑器打开用户目录下的.bashrc文件

$ cd ~              #到用户根目录下

$ ls -a              #查看所有文件,包含隐藏的文件

$ vi .bash_profile     #修改用户环境变量文件

(2)在.bashrc文件末尾加入:  

export JAVA_HOME=/usr/share/jdk1.5.0_05

export PATH=$JAVA_HOME/bin:$PATH

(3)重新登录

方法三:直接在shell下设置变量

作用范围:只对当前shell(BASH)有效(临时的)

适用范围:临时使用。因此这种方法仅仅是临时使用,以后要使用的时候又要重新设置,比较麻烦。

 

只需在shell终端执行下列命令:

export JAVA_HOME=/usr/share/jdk1.5.0_05

export PATH=$JAVA_HOME/bin:$PATH

 

内容概要:本文深入探讨了Kotlin语言在函数式编程和跨平台开发方面的特性和优势,结合详细的代码案例,展示了Kotlin的核心技巧和应用场景。文章首先介绍了高阶函数和Lambda表达式的使用,解释了它们如何简化集合操作和回调函数处理。接着,详细讲解了Kotlin Multiplatform(KMP)的实现方式,包括共享模块的创建和平台特定模块的配置,展示了如何通过共享业务逻辑代码提高开发效率。最后,文章总结了Kotlin在Android开发、跨平台移动开发、后端开发和Web开发中的应用场景,并展望了其未来发展趋势,指出Kotlin将继续在函数式编程和跨平台开发领域不断完善和发展。; 适合人群:对函数式编程和跨平台开发感兴趣的开发者,尤其是有一定编程基础的Kotlin初学者和中级开发者。; 使用场景及目标:①理解Kotlin中高阶函数和Lambda表达式的使用方法及其在实际开发中的应用场景;②掌握Kotlin Multiplatform的实现方式,能够在多个平台上共享业务逻辑代码,提高开发效率;③了解Kotlin在不同开发领域的应用场景,为选择合适的技术栈提供参考。; 其他说明:本文不仅提供了理论知识,还结合了大量代码案例,帮助读者更好地理解和实践Kotlin的函数式编程特性和跨平台开发能力。建议读者在学习过程中动手实践代码案例,以加深理解和掌握。
内容概要:本文深入探讨了利用历史速度命令(HVC)增强仿射编队机动控制性能的方法。论文提出了HVC在仿射编队控制中的潜在价值,通过全面评估HVC对系统的影响,提出了易于测试的稳定性条件,并给出了延迟参数与跟踪误差关系的显式不等式。研究为两轮差动机器人(TWDRs)群提供了系统的协调编队机动控制方案,并通过9台TWDRs的仿真和实验验证了稳定性和综合性能改进。此外,文中还提供了详细的Python代码实现,涵盖仿射编队控制类、HVC增强、稳定性条件检查以及仿真实验。代码不仅实现了论文的核心思想,还扩展了邻居历史信息利用、动态拓扑优化和自适应控制等性能提升策略,更全面地反映了群体智能协作和性能优化思想。 适用人群:具备一定编程基础,对群体智能、机器人编队控制、时滞系统稳定性分析感兴趣的科研人员和工程师。 使用场景及目标:①理解HVC在仿射编队控制中的应用及其对系统性能的提升;②掌握仿射编队控制的具体实现方法,包括控制器设计、稳定性分析和仿真实验;③学习如何通过引入历史信息(如HVC)来优化群体智能系统的性能;④探索中性型时滞系统的稳定性条件及其在实际系统中的应用。 其他说明:此资源不仅提供了理论分析,还包括完整的Python代码实现,帮助读者从理论到实践全面掌握仿射编队控制技术。代码结构清晰,涵盖了从初始化配置、控制律设计到性能评估的各个环节,并提供了丰富的可视化工具,便于理解和分析系统性能。通过阅读和实践,读者可以深入了解HVC增强仿射编队控制的工作原理及其实际应用效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值