Shell 的变数功能--变数键盘读取、阵列与宣告: ..
时间:2009-01-15 来源:poplar.xu
变数键盘读取、阵列与宣告: read, array, declare
我们上面提到的变数设定功能,都是直接由指令列直接设定的,那么,可不可以让使用者能够经由键盘输入? 什么意思呢?是否记得某些程式执行的过程当中,会等待使用者输入 "yes/no" 之类的讯息啊!? 在 bash 里面也有相对应的功能喔!此外,我们还可以宣告这个变数的属性, 例如:阵列或者是数字等等的。底下就来看看吧!
# read
要读取来自键盘输入的变数,就是用 read 这个指令了。这个指令最常被用在 shell script 的撰写当中, 以跟使用者进行对谈。关于 script 的写法,我们会在后面章节介绍,底下先来瞧一瞧 read 的相关语法吧!
[root@linux ~]# read [-pt] variable
参数:
-p :后面可以接提示字元!
-t :后面可以接等待的‘秒数!’这个比较有趣~不会一直等待使用者啦!
范例:
范例一:让使用者由键盘输入一内容,将该内容变成 atest 变数
[root@linux ~]# read atest
This is a test
[root@linux ~]# echo $atest
This is a test
范例二:提示使用者 30 秒内输入自己的大名,将该输入字串做成 named 变数
[root@linux ~]# read -p "Please keyin your name: " -t 30 named
Please keyin your name: VBird Tsai
[root@linux ~]# echo $named
VBird Tsai
read 之后不加任何参数,直接加上变数名称,那么底下就会主动出现一个空白行,等待您输入。 如果加上 -t 后面接秒数之后,例如上面的范例当中,那么 30 秒之内没有任何动作时, 该指令就会自动略过了~如果是加上 -p ,嘿嘿!后面就会有比较多可以用的提示字元给我们参考! 在指令的下达里面,比较美观啦! ^_^
# declare / typeset
declare 或 typeset 是一样的功能,就是在宣告变数的属性。如果使用 declare 后面并没有接任何参数, 那么 bash 就会主动的将所有的变数名称与内容通通叫出来,就好像使用 set 一样啦! 那么 declare 还有什么语法呢?看看先:
[root@linux ~]# declare [-aixr] variable
参数:
-a :将后面的 variable 定义成为阵列 (array)
-i :将后面接的 variable 定义成为整数数字 (integer)
-x :用法与 export 一样,就是将后面的 variable 变成环境变数;
-r :将一个 variable 的变数设定成为 readonly ,该变数不可被更改内容,也不能 unset
范例:
范例一:让变数 sum 进行 100+300+50 的加总结果
[root@linux ~]# sum=100+300+50
[root@linux ~]# echo $sum
100+300+50 <==咦!怎么没有帮我计算加总?因为这是文字型态的变数属性啊!
[root@linux ~]# declare -i sum=100+300+50
[root@linux ~]# echo $sum
450 <==瞭乎??
范例二:将 sum 变成环境变数
[root@linux ~]# declare -x sum
范例三:让 sum 变成唯读属性,不可更动!
[root@linux ~]# declare -r sum
[root@linux ~]# sum=tesgting
-bash: sum: readonly variable <==老天爷~不能改这个变数了!
declare 也是个很有用的功能~尤其是当我们需要使用到底下的阵列功能时, 他也可以帮我们宣告阵列的属性喔!不过,老话一句,阵列也是在 shell script 比较常用的啦!
# 阵列属性 array 说明
某些时候,我们必须使用阵列来宣告一些变数,这有什么好处啊?在一般人的使用上, 果然是看不出来有什么好处的!不过,如果您曾经写过程式的话,那才会比较瞭解阵列的意义~ 阵列对写数值程式的设计师来说,可是不能错过学习的重点之一哩!好!不啰唆~ 那么要如何设定阵列的变数与内容呢?在 bash 里头,阵列的设定方式是:
var[index]=content
意思是说,我有一个阵列名称为 var ,而这个阵列的内容为 var[1]=小明, var[2]=大明, var[3]=好明 .... 等等,那个 index 就是一些数字啦,重点是用中刮号 ([ ]) 来设定的。 目前我们 bash 提供的是一维阵列。老实说,如果您不必写一些复杂的程式, 那么这个阵列的地方,可以先略过,等到有需要再来学习即可!因为要制作出阵列, 通常与回圈或者其他判断式交互使用才有比较高的意义存在!
范例:设定上面提到的 var[1] ~ var[3] 的变数。
[root@linux ~]# var[1]="small min"
[root@linux ~]# var[2]="big min"
[root@linux ~]# var[3]="nice min"
[root@linux ~]# echo "${var[1]}, ${var[2]}, ${var[3]}"
比较有趣的地方在于‘读取’,一般来说,建议直接以 ${阵列} 的方式来读取, 比较正确无误的啦!
我们上面提到的变数设定功能,都是直接由指令列直接设定的,那么,可不可以让使用者能够经由键盘输入? 什么意思呢?是否记得某些程式执行的过程当中,会等待使用者输入 "yes/no" 之类的讯息啊!? 在 bash 里面也有相对应的功能喔!此外,我们还可以宣告这个变数的属性, 例如:阵列或者是数字等等的。底下就来看看吧!
# read
要读取来自键盘输入的变数,就是用 read 这个指令了。这个指令最常被用在 shell script 的撰写当中, 以跟使用者进行对谈。关于 script 的写法,我们会在后面章节介绍,底下先来瞧一瞧 read 的相关语法吧!
[root@linux ~]# read [-pt] variable
参数:
-p :后面可以接提示字元!
-t :后面可以接等待的‘秒数!’这个比较有趣~不会一直等待使用者啦!
范例:
范例一:让使用者由键盘输入一内容,将该内容变成 atest 变数
[root@linux ~]# read atest
This is a test
[root@linux ~]# echo $atest
This is a test
范例二:提示使用者 30 秒内输入自己的大名,将该输入字串做成 named 变数
[root@linux ~]# read -p "Please keyin your name: " -t 30 named
Please keyin your name: VBird Tsai
[root@linux ~]# echo $named
VBird Tsai
read 之后不加任何参数,直接加上变数名称,那么底下就会主动出现一个空白行,等待您输入。 如果加上 -t 后面接秒数之后,例如上面的范例当中,那么 30 秒之内没有任何动作时, 该指令就会自动略过了~如果是加上 -p ,嘿嘿!后面就会有比较多可以用的提示字元给我们参考! 在指令的下达里面,比较美观啦! ^_^
# declare / typeset
declare 或 typeset 是一样的功能,就是在宣告变数的属性。如果使用 declare 后面并没有接任何参数, 那么 bash 就会主动的将所有的变数名称与内容通通叫出来,就好像使用 set 一样啦! 那么 declare 还有什么语法呢?看看先:
[root@linux ~]# declare [-aixr] variable
参数:
-a :将后面的 variable 定义成为阵列 (array)
-i :将后面接的 variable 定义成为整数数字 (integer)
-x :用法与 export 一样,就是将后面的 variable 变成环境变数;
-r :将一个 variable 的变数设定成为 readonly ,该变数不可被更改内容,也不能 unset
范例:
范例一:让变数 sum 进行 100+300+50 的加总结果
[root@linux ~]# sum=100+300+50
[root@linux ~]# echo $sum
100+300+50 <==咦!怎么没有帮我计算加总?因为这是文字型态的变数属性啊!
[root@linux ~]# declare -i sum=100+300+50
[root@linux ~]# echo $sum
450 <==瞭乎??
范例二:将 sum 变成环境变数
[root@linux ~]# declare -x sum
范例三:让 sum 变成唯读属性,不可更动!
[root@linux ~]# declare -r sum
[root@linux ~]# sum=tesgting
-bash: sum: readonly variable <==老天爷~不能改这个变数了!
declare 也是个很有用的功能~尤其是当我们需要使用到底下的阵列功能时, 他也可以帮我们宣告阵列的属性喔!不过,老话一句,阵列也是在 shell script 比较常用的啦!
# 阵列属性 array 说明
某些时候,我们必须使用阵列来宣告一些变数,这有什么好处啊?在一般人的使用上, 果然是看不出来有什么好处的!不过,如果您曾经写过程式的话,那才会比较瞭解阵列的意义~ 阵列对写数值程式的设计师来说,可是不能错过学习的重点之一哩!好!不啰唆~ 那么要如何设定阵列的变数与内容呢?在 bash 里头,阵列的设定方式是:
var[index]=content
意思是说,我有一个阵列名称为 var ,而这个阵列的内容为 var[1]=小明, var[2]=大明, var[3]=好明 .... 等等,那个 index 就是一些数字啦,重点是用中刮号 ([ ]) 来设定的。 目前我们 bash 提供的是一维阵列。老实说,如果您不必写一些复杂的程式, 那么这个阵列的地方,可以先略过,等到有需要再来学习即可!因为要制作出阵列, 通常与回圈或者其他判断式交互使用才有比较高的意义存在!
范例:设定上面提到的 var[1] ~ var[3] 的变数。
[root@linux ~]# var[1]="small min"
[root@linux ~]# var[2]="big min"
[root@linux ~]# var[3]="nice min"
[root@linux ~]# echo "${var[1]}, ${var[2]}, ${var[3]}"
比较有趣的地方在于‘读取’,一般来说,建议直接以 ${阵列} 的方式来读取, 比较正确无误的啦!
相关阅读 更多 +