文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一问弄懂Shell变量四大分类

2023-05-12 05:15

关注

目录

上一篇我们讲述了Shell的基本概念和运行方式,对Shell有了整体了解。如果说Shell是一栋大厦,那么变量便是一块块砖,是基础元素。Shell变量比可编译语言的变量更为复杂,种类更多,灵活性非常大,因此需要全面细致的把握。


Shell变量


什么是变量

变量是程序设计语言中的一个可以变化的量,当然,可以变化的是变量的值。变量在几乎所有的程序设计语言中都有定义,并且其涵义也大同小异。

从本质上讲,变量就是在程序中保存用户数据的一块内存空间,而变量名就是这块内存空间的地址。 在程序的执行过程中,保存数据的内存空间的内容可能会不断地发生变化,但是,代表内存地址的变量名却保持不变。 由于变量的值是在计算机的内存中,所以当计算机被重新启动后,变量的值将会丢失。因此,对于需要长久保存的数据,应该写入到磁盘中,避免存储在变量中。


shell变量定义

shell变量是一种用来存放数据的编程元素,它可以帮助我们简化很多工作 。shell变量的值可以是数字、字符串、文件名、命令的输出等。shell变量可以在shell脚本中使用,也可以在命令行中使用,可以被赋值、修改、删除、导出等。

shell变量赋值是使用等号(=)将变量的名称和变量的值连接起来,例如:name=Tom。注意,等号两边不能有空格,否则会出错。shell变量的赋值可以在命令行中进行,也可以在shell脚本中进行。shell变量的赋值可以覆盖之前的赋值,例如:name=Tom; name=Jerry。

shell变量使用时在变量的名称前加上美元符号$,例如:echo $name。这样就可以打印出变量的值。shell变量的使用可以在命令行中进行,也可以在shell脚本中进行。shell变量的使用可以和其他命令或字符串组合,例如:echo “My name is $name”。


shell变量分类

Shell变量可以分为以下几种类型:


环境变量


常见变量

在linux Shell中,有许多预定义的环境变量。以下是一些常见的环境变量及其用途:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ echo $HOME
/home/myuser
$ echo $USER
myuser
$ export PS1="[\e[32m]\u@\h:[\e[34m]\w[\e[0m]\$ "

定义一个带有颜色的Shell提示符,其中u代表用户名,h代表主机名,w代表当前工作目录。

$ echo $LANG
en_US.UTF-8
$ echo $PWD
/home/myuser




变量引用

在Shell脚本中,我们可以使用$符号来引用环境变量。例如:

#!/bin/bash
echo "My home directory is $HOME"
echo "My username is $USER"
echo "My PATH is $PATH"
echo "The value of MYVAR is $MYVAR"

执行后输出当前用户的主目录、用户名、PATH变量和MYVAR变量的值。


变量赋值

使用export命令可以将环境变量设置为全局变量,这样它们就可以在当前Shell会话中的所有进程中使用。例如:

$ export MYVAR="hello"

定义一个名为MYVAR的环境变量,并将其值设为hello。

同时,环境变量是可以重新赋值的,我们可以使用export命令将一个本地变量赋值给一个环境变量,或者直接在当前Shell会话中使用export命令重新赋值一个已经存在的环境变量。

例如,假设我们有一个名为MYVAR的环境变量,其当前值为hello。我们可以使用以下命令将一个本地变量myvar赋值给MYVAR环境变量:

$ myvar="world"
$ export MYVAR=$myvar

把本地变量myvar的值world赋值给环境变量MYVAR,此时MYVAR的值为world。

同样地,我们也可以直接在当前Shell会话中使用export命令重新赋值一个已经存在的环境变量:

$ export MYVAR="world"

重新将MYVAR的值设置为world。

需要注意的是,一旦我们重新赋值了一个环境变量,该变量的新值将在当前Shell会话中生效,同时也会影响到当前Shell会话中的所有子进程和后续的Shell会话。因此,如果我们需要在一个Shell会话中重新赋值一个环境变量,需要谨慎考虑其可能会对系统中其他程序的运行产生的影响。


本地变量




变量定义

本地变量可以使用=符号进行定义和赋值。例如:

$ myvar="hello"

定义一个名为myvar的本地变量,并将其值设为hello。我们可以使用echo命令来输出该变量的值:

$ echo $myvar
hello

本地变量只在当前Shell会话中可见,对于其他的Shell和Shell执行的程序是不可见的。

例如,如果我们在一个Shell会话中定义了一个本地变量:

$ myvar="hello"

那么在另一个Shell会话中,该变量是不存在的:

$ echo $myvar


变量引用

在Shel

#!/bin/bash
myvar="hello"
echo "The value of myvar is $myvar"

输出The value of myvar is hello


变量赋值

本地变量可以被重新赋值,例如:

$ myvar="hello"
$ echo $myvar
hello
$ myvar="world"
$ echo $myvar
world
$ unset myvar
$ echo $myvar

定义一个名为myvar的本地变量,并将其值设为hello,然后将其重新赋值为world,最后使用unset命令删除该变量。


变量删除

shell变量的删除的方法是使用unset命令,例如:unset name,这样就可以删除变量的名称和变量的值。shell变量的删除可以在命令行中进行,也可以在shell脚本中进行,删除可以释放内存空间,避免变量名冲突。

unset命令语法:unset [选项] [name ...]

选项含义
-f仅删除函数
-v仅删除变量(不包括只读变量)
-n删除具有引用属性的变量名(如果该选项存在)

如果不加选项参数,那么既可以删除变量,也可以删除函数。

需要注意的是,unset命令不能删除只读变量。


位置参数变量

变量定义

在Shell编程中,位置参数变量用于获取脚本或函数的输入参数。当我们执行一个Shell脚本或函数时,我们可以将参数传递给该脚本或函数,并在其中使用位置参数变量来获取这些参数的值。

常见位置参数变量:

变量引用

下面是一个使用位置参数变量的示例脚本:

#!/bin/bash
echo "The name of this script is: $0"
echo "The first parameter is: $1"
echo "The second parameter is: $2"
echo "The third parameter is: $3"
echo "The total number of parameters is: $#"
echo "All the parameters are: $*"
echo "All the parameters are: $@"

当我们执行该脚本并传递三个参数时,输出将如下所示:

$ ./script.sh hello world 123
The name of this script is: ./script.sh
The first parameter is: hello
The second parameter is: world
The third parameter is: 123
The total number of parameters is: 3
All the parameters are: hello world 123
All the parameters are: hello world 123

我们可以看到,使用位置参数变量可以轻松地获取脚本或函数的输入参数,并对其进行处理和操作。位置参数变量适用于编写需要处理大量输入参数的脚本。


特殊变量

变量定义

在Shell编程中,有很多特殊变量可以用来获取各种系统信息和脚本信息,使用特殊变量能够简化代码复杂度,减少使用复杂代码来完成固定任务的情况,提升运行效率。

常见的特殊变量:

变量引用

下面是一个使用特殊变量的示例脚本:

#!/bin/bash

echo "The process ID of this script is: $$"
echo "The exit status of the last command is: $?"
echo "The process ID of the last background job is: $!"
echo "The current user is: $USER"
echo "The home directory of the current user is: $HOME"
echo "The current PATH is: $PATH"
echo "The current working directory is: $PWD"
echo "The current shell is: $SHELL"
echo "A random number between 0 and 32767: $RANDOM"
echo "The current line number is: $LINENO"
echo "The current field separator is: $IFS"

当我们执行该脚本时,输出将如下所示:

The process ID of this script is: 1234
The exit status of the last command is: 0
The process ID of the last background job is: 
The current user is: username
The home directory of the current user is: /home/username
The current PATH is: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
The current working directory is: /home/username
The current shell is: /bin/bash
A random number between 0 and 32767: 2373
The current line number is: 7
The current field separator is:  

通过示例可以看到,使用特殊变量可以轻松地获取各种系统信息,并在脚本中使用它们来进行处理和操作。在实际编程中,特殊变量能够有效简化代码,提高执行效率,特别是在需要获取系统信息或处理系统事件的脚本中。


总结

Shell变量分为环境变量、本地变量、位置参数变量和特殊变量,实际使用中,四者有一定的重叠性。Shell变量是用好Shell编程的基础,灵活恰当的使用变量可以简化脚本复杂度,提高脚本运行效率和可读性。

到此这篇关于一问弄懂Shell变量四大分类的文章就介绍到这了,更多相关shell变量内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯