首页 理论教育 变量测试与赋值指南-实用Linux Shell编程

变量测试与赋值指南-实用Linux Shell编程

时间:2023-11-18 理论教育 版权反馈
【摘要】:在编写脚本时,在一个变量未赋初值的情况下,有时需要给它一个默认值。Message}的值就是var本身,例如:如果var未定义,${var?"pleaseinputaname"}的值为Tom,则变量name被赋值为Tom,最后显示Good morningTom。当运行positional_parameter_3.sh时,没有参数,即位置参数$1无值,执行到第二行时,显示pleaseinputaname,第三行不再执行。

变量测试与赋值指南-实用Linux Shell编程

在编写脚本时,在一个变量未赋初值的情况下,有时需要给它一个默认值。Bash提供了这方面的功能,见表4-4。

表4-4 变量替换

978-7-111-48202-4-Chapter04-177.jpg

先定义var,保证var非空,表达式${var-Default}或者${var:-Default}的值就是var的值,例如:

978-7-111-48202-4-Chapter04-178.jpg

var本身不受影响:

978-7-111-48202-4-Chapter04-179.jpg

如果var未定义,表达式${var-Default}和${var:-Default}的值就是Default,var本身不受影响,例如:

978-7-111-48202-4-Chapter04-180.jpg

如果var定义了,但值为空,表达式${var-Default}的值为空,而表达式${var:-Default}的值就是Default,var本身不受影响,例如:

978-7-111-48202-4-Chapter04-181.jpg

对于用户而言,一个变量未定义和定义为空,二者效果是一样的,都是没有值,所以${var:-Default}比较常用,${var-Default}不太常用。同样道理,${var:=Default}比较常用。下面只讲${var:=Default}的使用。

如果var有值,表达式${var:=Default}的值就是var的值,例如:

978-7-111-48202-4-Chapter04-182.jpg

如果var无值,表达式${var:=Default}的值就是Default,同时var被赋值为Default(如果var无值,表达式${var:-Default}的值也是Default,但var不变,这是${var:=Default}与${var:-Default}的区别所在)。例如:

978-7-111-48202-4-Chapter04-183.jpg

实际上,表4-4中的Default也可以是一个变量,例如:

978-7-111-48202-4-Chapter04-184.jpg

下面的脚本询问客户的需求,客户需要什么,就显示客户的需求,客户无明确需求的,默认为客户需要水。

978-7-111-48202-4-Chapter04-185.jpg

运行脚本,输入beer,显示客户需要beer:

978-7-111-48202-4-Chapter04-186.jpg

运行脚本,不输入需求(直接按回车键),显示客户需要water:

978-7-111-48202-4-Chapter04-187.jpg

978-7-111-48202-4-Chapter04-188.jpg

+与-是相反的运算,${var+Other}或${var:+Other}与${var-Default}或${var:-Default}的作用刚好相反。当var有值的时候,${var+Other}与${var:+Other}的值都是Other:

978-7-111-48202-4-Chapter04-189.jpg

var本身不受影响:

978-7-111-48202-4-Chapter04-190.jpg

当var未定义时,${var+Other}与${var:+Other}的值都是空:(www.xing528.com)

978-7-111-48202-4-Chapter04-191.jpg

当var有定义但为空时,${var+Other}的值为Other,${var:+Other}的值为空:

978-7-111-48202-4-Chapter04-192.jpg

如果var有非空值,${var?Message}与${var:?Message}的值就是var本身,例如:

978-7-111-48202-4-Chapter04-193.jpg

如果var未定义,${var?Message}与${var:?Message}会显示Message,例如:

978-7-111-48202-4-Chapter04-194.jpg

978-7-111-48202-4-Chapter04-195.jpg

当var未定义时,在命令行直接输入${var?Message}或者${var:?Message}就会显示Message:

978-7-111-48202-4-Chapter04-196.jpg

如果var被赋为空,${var?Message}显示空,${var:?Message}会显示Message,例如:

978-7-111-48202-4-Chapter04-197.jpg

下面举一个${var:?Message}应用的例子。脚本positional_parameter_3.sh的第二行先检查位置参数$1是否有值,如果有,把值赋给name,然后第三行显示Good morning;如果位置参数$1没有值,第二行显示提示please input a name。

978-7-111-48202-4-Chapter04-198.jpg

运行脚本,参数为Tom:

978-7-111-48202-4-Chapter04-199.jpg

无参数,运行脚本:

978-7-111-48202-4-Chapter04-200.jpg

当运行positional_parameter_3.shTom时,参数为Tom,即位置参数$1=Tom,那么表达式${1:?"pleaseinputaname"}的值为Tom,则变量name被赋值为Tom,最后显示Good morningTom。当运行positional_parameter_3.sh时,没有参数,即位置参数$1无值,执行到第二行时,显示pleaseinputaname,第三行不再执行。

下面介绍表4-4中${!varprefix*}的使用。

定义三个以字母v开头的变量:

978-7-111-48202-4-Chapter04-201.jpg

列出当前shell以v开头的变量:

978-7-111-48202-4-Chapter04-202.jpg

再定义两个值为空的以v开头的变量:

978-7-111-48202-4-Chapter04-203.jpg

列出当前shell以v开头的变量:

978-7-111-48202-4-Chapter04-204.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈