Linux Shell脚本中的变量

时间:2020-03-21 11:47:30  来源:igfitidea点击:

计算机应该能够存储信息,然后再对该信息进行操作。
应该有一种方法来存储信息,然后在以后检索该信息。
计算机程序还处理信息的存储和检索。
为了存储信息,我们需要存储空间(计算机内存)。
为了检索存储在内存中的信息,我们需要指定存储信息的存储位置。

因此,基本上我们需要一个名称或者某种标识符来检索存储的信息。
这就是变量出现的地方。
在本文中,我们将讨论bash shell脚本中的变量。

本文是有关“ bash shell脚本”的系列教程的一部分。
如果我们是,则建议先阅读以下两篇文章,然后再继续进行。

因此,变量是一种可以用来存储信息(数据),然后在以后检索它或者对其进行操作的东西。
没有变量,编写有用的程序几乎是不可能的。
没有变量,我们将无法从用户那里获取信息,无法对数据进行操作,无法循环或者计数数据,无法根据某种数据类型更改程序的行为。

没有变量,程序将变得without脚。
任何任意数据都可以存储在变量中(变量不过是带有名称的存储器块,以后可以访问它)。

尽管变量使用内存块来存储数据。
就bash shell而言,与某些其他编程语言不同,我们不需要自己分配变量所需的内存。
我们也不必担心在使用变量后释放内存。

我们可以定义一个变量,并使用左侧的变量名称(后跟等号)和右侧的变量值(如下例所示)将数据写入其中。

范例1:

variable=value

范例2:

name=sarath

范例3:

age=28

关于变量分配要注意的一件事是,在=符号之前和之后不允许使用空格字符。
因此,基本上变量=值无效。
但是variable = value是有效的变量分配。

这是因为variable = value与任何其他带有参数的命令完全相同。
例如,ls -la与变量=值非常相似。
“ =”将被视为命令“变量”的第一个参数。

变量=值也将不起作用。
这是因为= value再次被视为命令变量的参数。

好的。所以现在我知道如何在Bash中定义变量,并为其分配值。但是,如何访问变量或者稍后检索变量?

我们可以使用美元符号($)后跟变量名来访问或者检索变量内的数据,如下面的示例所示。

[root@www ~]#echo $variable
value
[root@www ~]#echo $name
sarath
[root@www ~]#echo $age
28

如何通过用户输入在bash shell中交互设置变量?

我们可以使用称为read的命令非常轻松地实现这一目标。
一个例子如下所示。

#!/bin/bash
echo "what is your name?"
read name
echo "Hello $name!. Welcome to theitroad Scripting Tutorial"

执行上面的脚本将首先打印“我们叫什么名字?”,然后等待用户提供输入。
这是因为脚本读取名称的第二行。

然后,用户输入的内容将记录到名为name的变量中。
然后在下一行中将其打印到屏幕上,如下所示。

what is your name?
sarath
Hello sarath!. Welcome to theitroad Scripting Tutorial

在上面的示例中,系统提示时输入sarath。
因此输出。

如何将命令的输出作为值分配给bash中的变量?

就脚本而言,这是变量的常见用例之一。
我们需要获取命令的输出,并将该输出作为值传递给变量。
这很简单。
请参见下面的示例。

#!/bin/bash
DATE=`date`
echo "Today is $DATE"

它简单而直接。
只需将命令放在反引号内,如上面的示例所示。

date命令是标准的Linux命令,可显示当前日期和时间。
该命令的输出分配给名为DATE的变量,然后将其输出到屏幕上。

如何在bash中将参数传递给脚本,并将这些参数作为值分配给变量?

这也很简单。
Bash为此提供了一个开箱即用的解决方案,它将为大多数用例解决问题。
请参见以下示例。

#!/bin/bash
firstname=
lastname=
scriptname=
#!/bin/bash
echo "Hello!. So your Firstname is , and your Lastname is  and the script that you are executing is 
root@localhost:~# ./test1.sh Sarath Pillai
Hello!. So your Firstname is Sarath, and your Lastname is Pillai and the script that you are executing is ./test1.sh
"
echo "Hello!. So your Firstname is $firstname, and your Lastname is $lastname and the script that you are executing is $scriptname"

它总是这样。
$0表示脚本本身。
$1表示传递给脚本的第一个参数。
$2我们传递的第二个参数。
$3第三,$4第四,依此类推...

那么,为什么要其中需要这些firstname,lastname和scriptname变量。
好吧,我们不需要它们。
该脚本可以是一个简单的线性脚本,如下所示。

root@localhost:~# ./test1.sh 'S a r a t h' 'P i l l a i'
Hello!. So your Firstname is S a r a t h, and your Lastname is P i l l a i and the script that you are executing is ./test1.sh

我们可以如下执行脚本。

root@localhost:/opt# ls
testdirectory
root@localhost:/opt# echo $?
0
root@localhost:/opt# ls )
-bash: syntax error near unexpected token `)'
ubuntu@ip-10-12-4-160:/opt$echo $?
2

如果看到上面的执行。
空格字符是让脚本知道参数的内容(第一个参数和第二个参数之间有空格)。
那么如何在参数本身中传递带有空格字符的参数呢?

我们可以如下所示使用引号。

#!/bin/bash
variable=2
echo The variable value is $variable
unset variable
echo The variable value is $variable

如何验证shell脚本中的命令是否成功?

类似于$0,$1等,shell也为此提供了一个内置机制。
我们可以使用预定义变量访问命令的退出状态。
该变量将包含数值,该数值将指示命令是成功还是失败。

Shell中的每个命令在执行后都会返回一个数字返回码。
取值范围是0~255.

Shell将在名为$?
的变量中设置最后执行的命令的返回码。
是的。
它叫做$?。
如果成功,几乎所有命令都将返回零(0)的代码。

root@localhost:~# bash test2.sh
The variable value is 2
The variable value is

在上面的示例中,第一个ls命令成功执行,因此退出代码为零。
使用错误的参数触发了第二个ls命令。
因此,退出代码为两个(所有非零退出代码通常表示失败。

如何在bash中取消设置变量?

可以使用unset命令完成此操作,如下所示。

##代码##

上面脚本的输出如下所示。

##代码##

第二个回显将不显示该变量的任何值,因为我们已经在上一行中使用unset命令删除了它的值。