本文正在参加「金石方案」

上一篇咱们讲述了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变量能够分为以下几品种型:

  • 环境变量(Environment Variable):环境变量是在Shell启动时由操作体系设置的,它们关于一切的Shell和Shell履行的程序都是可见的。一些常见的环境变量包含PATH、HOME、USER等。
  • 本地变量(Local Variable):本地变量是由Shell程序界说的,仅在当时Shell会话中可见,关于其他的Shell和Shell履行的程序是不行见的。本地变量能够通过=符号来界说和赋值,例如myvar=”hello”。
  • 方位参数变量(Positional Parameter Variable):方位参数变量是用来存储Shell脚本的指令行参数的,它们包含$1$2$3等。例如,假如咱们运转一个Shell脚本而且传递了两个参数,那么这两个参数会被别离赋值给$1$2
  • 特别变量(Special Variable):特别变量是由Shell程序预界说的,用于存储一些特定的值或状况。例如,$? 用于存储上一个指令的返回值,$$用于存储当时Shell进程的PID,$IFS用于存储当时Shell的字段分隔符等。

环境变量

常见变量

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

  • PATH:用于界说可履行文件的查找途径。当咱们输入一个指令时,Shell会在PATH变量指定的途径中查找该指令的可履行文件。例如:
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
  • HOME:用于界说当时用户的主目录途径。该变量一般用于Shell脚本中,以便访问用户的主目录下的文件和目录。例如:
$ echo $HOME
/home/myuser
  • USER:用于界说当时登录用户的用户名。该变量一般用于Shell脚本中,以便获取当时脚本的履行者。例如:
$ echo $USER
myuser
  • PS1:用于界说Shell提示符的格局。该变量一般用于自界说Shell提示符的外观和行为。例如:
$ export PS1="[\e[32m]\u@\h:[\e[34m]\w[\e[0m]\$ "

界说一个带有色彩的Shell提示符,其间u代表用户名,h代表主机名,w代表当时作业目录。

  • LANG:用于界说当时体系的默许言语。该变量一般用于控制程序的本地化和国际化。例如:
$ echo $LANG
en_US.UTF-8
  • PWD:当时作业目录。例如:
$ 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

变量引证

在Shell脚本中,咱们能够运用$符号来引证本地变量。例如:

#!/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脚本或函数时,咱们能够将参数传递给该脚本或函数,并在其间运用方位参数变量来获取这些参数的值。

常见方位参数变量:

  • $0:当时脚本或函数的称号。
  • $1$2$3、…:当时脚本或函数的第一个、第二个、第三个参数,以此类推。
  • $#:当时脚本或函数的参数个数。
  • $*:当时脚本或函数的一切参数,作为一个字符串。
  • $@:当时脚本或函数的一切参数,作为一个数组。

变量引证

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

#!/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编程中,有许多特别变量能够用来获取各种体系信息和脚本信息,运用特别变量能够简化代码复杂度,削减运用复杂代码来完成固定任务的情况,提升运转功率

常见的特别变量:

  • $$:当时脚本或进程的进程ID。
  • $?:上一个指令或脚本的退出状况码。
  • $!:上一个后台进程的进程ID。
  • $USER:当时用户的用户名。
  • $HOME:当时用户的主目录途径。
  • $PATH:当时体系的履行途径。
  • $PWD:当时作业目录途径。
  • $SHELL:当时运用的Shell程序途径。
  • $RANDOM:一个0到32767之间的随机数。
  • $LINENO:当时脚本的行号。
  • $IFS:当时脚本的字段分隔符。
  • $PS1:Shell提示符的格局。
  • $PS2:Shell续行提示符的格局。

变量引证

下面是一个运用特别变量的示例脚本:

#!/bin/bashecho "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变量的具体运用办法。