Linuxshell脚本编程中的变量和系统定义的意义分析

在每种编程语言中,变量都饰演了一个重要的角色。在Linuxshell脚本编程中,我们使用两种类型的变量:系统定义的变量和用户定义的变量。

shell脚本中的变量是拿来调用一个数值或则字符值的手段。与正规的编程语言不同的是,shell脚本不要求你去为变量申明一个类型。

在本文中,我们将讨论shell脚本编程中的变量及其类型,以及怎样设置和使用这种变量。

系统定义的变量:

这种变量由操作系统(Linux)自身创建并维护,一般它们以小写字母定义,我们可以通过命令“$set”来查看这种变量。下边列举了部份系统定义的变量:

系统定义的变量

意义

BASH=/bin/bash

BashShell名称

BASH_VERSION=4.1.2(1)

Bash版本

COLUMNS=80

你的屏幕长度(列数)

HOME=/home/linuxtechi

用户家目录

LINES=25

你的屏幕高度(行数)

LOGNAME=LinuxTechi

当前登入用户的名子

OSTYPE=Linux

操作系统类型

PATH=/usr/bin:/sbin:/bin:/usr/sbin

可执行文件搜索路径

PS1=[u@hW]$

命令行提示符

PWD=/home/linuxtechi

当前工作目录

SHELL=/bin/bash

Shell名称

USERNAME=linuxtechi

当前登入的用户名

要复印以上变量的值,可以使用echocommand命令,如下:

#echo$HOME

#echo$USERNAME

我们可以通过在环境变量名前后置一个欧元符号来从你的脚本里输入环境变量。请看下边脚本演示:

$catmyscript

#!/bin/bash

#displayuserinformationfromthesystem.

echo“Userinfoforuserid:$USER”

echoUID:$UID

echoHOME:$HOME

注意:echo命令中的环境变量在脚本运行时会被它们的值取代。同时注意,我们可以再第一个字符串的双冒号中放置$USER系统变量,而shell脚本依然可以明白我们的意思。但是,该方式有一个缺点。看下边这个事例:

$echo“Thecostoftheitemis$15”

Thecostoftheitemis5

很显著,那不是我们说希望的。无论何时,当脚本遇到顿号中的欧元符号时,它就会觉得你是在调用一个变量。在本例中,该脚本试着显示变量$1(而这个变量并没有定义),之后显示数字5。要显示实际上的欧元符号,你必须后置一个反斜线字符:

$echo“Thecostoftheitemis$15”

Thecostoftheitemis$15

那样很多了。反斜线容许shell脚本将卢布符号解释成为实际的欧元符号,而不是变量。

用户定义的变量:

这种变量由用户定义。shell脚本容许我们在脚本中设置并使用我们自己的变量。设置变量容许你临时储存数据并在脚本中使用,让shell脚本看上去像一个真正的计算机程序。

用户变量可以是任何不超过20个的字母、数字或则顿号字符的文本字符串(LCTT评注:变量只能以字母或顿号开头)。用户变量是大小写敏感的,因而,变量Var1和变量var1是不同的变量。这个小规则经常让菜鸟编撰脚本时麻烦重重。

我们可以通过等于号为变量形参。变量,等于号和值(对于菜鸟又是个麻烦的地方)之间不能有空格。下边是几个给用户变量形参的事例:

var1=10

var2=-57

var3=testing

var4=“stillmoretesting”

shell脚本为变量值手动确定数据类型。shell脚本内定义的变量会在脚本运行时保留它们的值,当脚本完成后则删掉那些值。

如同系统变量一样,用户变量也可以使用欧元符号来调用:

$cattest3

#!/bin/bash

#testingvariables

days=10

guest=”Katie”

echo”$guestcheckedin$daysdaysago”

days=5

guest=”Jessica”

echo”$guestcheckedin$daysdaysago”

$

运行脚本会形成以下输出:

$chmodu+xtest3

$./test3

Katiecheckedin10daysago

Jessicacheckedin5daysago

$

每次变量被调用,它就会弄成了当前分配给它的值。有一点很重要shell脚本 变量,当调用一个变量值时shell脚本 变量,你使用欧元符号,而且当为一个变量分配一个值时,你不能用欧元符号。下边用事例来说明:

$cattest4

#!/bin/bash

#assigningavariablevaluetoanothervariable

value1=10

value2=$value1

echoTheresultingvalueis$value2

$

当你使用形参句子中value1变量的值时,你始终必须使用欧元符号。这段代码形成了如下输出:

$chmodu+xtest4

$./test4

Theresultingvalueis10

$

假如你忘了欧元符号,而又让value2形参行看上去像这样:

value2=value1

你会获得下边的输出:

$./test4

Theresultingvalueisvalue1

$

没有欧元符号,shell解释变量名为普通文本字符串,这极有可能不是你想要的。

在shell变量中使用反冒号(`):

反冒号容许你将shell命令的输出形参给变量。其实这其实没哪些大不了,但它是脚本编程中主要的建立基块。你必须使用反冒号将整个命令行包含上去:

**testing=`date`**

shell会在反冒号中运行命令,之后将输出结果形参给变量testing。下边的反例给出了怎样使用一个常规shell命令的输出结果来创建一个变量:

$cattest5

#!/bin/bash

#usingthebacktickcharacter

testing=`date`

echo”Thedateandtimeare:”$testing

$

变量testing接收来自date命令的输出结果,而它又在echo句子中被调用。运行脚本会形成如下输出:

$chmodu+xtest5

$./test5

Thedateandtimeare:MonJan3120:23:25EDT2011

注:在bash中,你也可以选用$(…)句型来替换反冒号(`),它有个优点就是可以重用(re-entrant)。

例:

$echo”Today’sdate&timeis:”$(date)

Today’sdate&timeis:SunJul2716:26:56IST2014

© 版权声明
THE END
喜欢就支持一下吧
点赞204 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片