注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

谷搜互联网应用www.iguso.com

谷搜专注企业邮箱十二年

 
 
 

日志

 
 

变数键盘读取(read)、阵列(array)与宣告(declare)  

2014-05-27 16:55:36|  分类: 技术文章 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

变数的设定功能都是由指令列直接设定的,那么,可不可以让使用者能够经由键盘输入呢?是否记得某些程式执行的过程当中,会等待使用者输入 "yes/no" 之类的讯息啊? 在 bash 里面也有相对应的功能喔!此外,我们还可以宣告这个变数的属性, 例如:阵列或者是数字等等的。下面就一起来看一看吧!

  读取(read)

  要读取来自键盘输入的变数,就是用 read 这个指令了。这个指令最常被用在 shell script 的撰写当中, 想要跟使用者对谈?用这个指令就对了。关于 script 的写法,我们会在第十叁章介绍,底下先来瞧一瞧 read 的相关语法吧!

  [root@www ~]# read [-pt] variable

  选项与参数:

  -p :后面可以接提示字元!

  -t :后面可以接等待的『秒数!』这个比较有趣~不会一直等待使用者啦!海外主机空间,香港主机空间

  範例一:让使用者由键盘输入一内容,将该内容变成名为 atest 的变数

  [root@www ~]# read atest

  This is a test <==此时游标会等待你输入!请输入左侧文字看看

  [root@www ~]# echo $atest

  This is a test <==你刚刚输入的资料已经变成一个变数内容!

  範例二:提示使用者 30 秒内输入自己的大名,将该输入字串作为名为 named 的变数内容

  [root@www ~]# read -p "Please keyin your name: " -t 30 named

  Please keyin your name: VBird Tsai <==注意看,会有提示字元喔!

  [root@www ~]# echo $named

  VBird Tsai <==输入的资料又变成一个变数的内容了!

  read 之后不加任何参数,直接加上变数名称,那么底下就会主动出现一个空白行等待你的输入(如範例一)。 如果加上 -t 后面接秒数,例如上面的範例二,那么 30 秒之内没有任何动作时, 该指令就会自动略过了~如果是加上 -p ,嘿嘿!在输入的游标前就会有比较多可以用的提示字元给我们参考! 在指令的下达裡面,比较美观啦! ^_^

  宣告(declare) / typeset

  declare 或 typeset 是一样的功能,就是在『宣告变数的类型』。如果使用 declare 后面并没有接任何参数,那么 bash 就会主动的将所有的变数名称与内容通通叫出来,就好像使用 set 一样啦! 那么 declare 还有什么语法呢?看看先:

  [root@www ~]# declare [-aixr] variable

  选项与参数:

  -a :将后面名为 variable 的变数定义成为阵列 (array) 类型

  -i :将后面名为 variable 的变数定义成为整数数字 (integer) 类型

  -x :用法与 export 一样,就是将后面的 variable 变成环境变数;

  -r :将变数设定成为 readonly 类型,该变数不可被更改内容,也不能 unset

  範例一:让变数 sum 进行 100+300+50 的加总结果

  [root@www ~]# sum=100+300+50

  [root@www ~]# echo $sum

  100+300+50 <==咦!怎么没有帮我计算加总?因为这是文字型态的变数属性啊!

  [root@www ~]# declare -i sum=100+300+50

  [root@www ~]# echo $sum

  450 <==瞭乎??

  由于在预设的情况底下, bash 对于变数有几个基本的定义:

  变数类型预设为『字串』,所以若不指定变数类型,则 1+2 为一个『字串』而不是『计算式』。 所以上述第一个执行的结果才会出现那个情况的;

  bash 环境中的数值运算,预设最多仅能到达整数形态,所以 1/3 结果是 0;

  现在你晓得为啥你需要进行变数宣告了吧?如果需要非字串类型的变数,那就得要进行变数的宣告才行啦! 底下继续来玩些其他的 declare 功能。

  範例二:将 sum 变成环境变数

  [root@www ~]# declare -x sum

  [root@www ~]# export | grep sum

  declare -ix sum="450" <==果然出现了!包括有 i 与 x 的宣告!

  範例叁:让 sum 变成唯读属性,不可更动!

  [root@www ~]# declare -r sum

  [root@www ~]# sum=tesgting

  -bash: sum: readonly variable <==老天爷~不能改这个变数了!

  範例四:让 sum 变成非环境变数的自订变数吧!

  [root@www ~]# declare +x sum <== 将 - 变成 + 可以进行『取消』动作

  [root@www ~]# declare -p sum <== -p 可以单独列出变数的类型

  declare -ir sum="450" <== 看吧!只剩下 i, r 的类型,不具有 x 啰!

  declare 也是个很有用的功能~尤其是当我们需要使用到底下的阵列功能时, 他也可以帮我们宣告阵列的属性喔!不过,老话一句,阵列也是在 shell script 比较常用的啦! 比较有趣的是,如果你不小心将变数设定为『唯读』,通常得要登出再登入才能復塬该变数的类型了! @_@

  阵列 (array) 变数类型

  某些时候,我们必须使用阵列来宣告一些变数,这有什么好处啊?在一般人的使用上, 果然是看不出来有什么好处的!不过,如果您曾经写过程式的话,那才会比较瞭解阵列的意义~ 阵列对写数值程式的设计师来说,可是不能错过学习的重点之一哩!好!不啰唆~ 那么要如何设定阵列的变数与内容呢?在 bash 裡头,阵列的设定方式是:

  var[index]=content

  意思是说,我有一个阵列名称为 var ,而这个阵列的内容为 var[1]=小明, var[2]=大明, var[3]=好明 .... 等等,那个 index 就是一些数字啦,重点是用中刮号 ([ ]) 来设定的。 目前我们 bash 提供的是一维阵列。老实说,如果您不必写一些复杂的程式, 那么这个阵列的地方,可以先略过,等到有需要再来学习即可!因为要製作出阵列, 通常与迴圈或者其他判断式交互使用才有比较高的存在意义!

  範例:设定上面提到的 var[1] ~ var[3] 的变数。

  [root@www ~]# var[1]="small min"

  [root@www ~]# var[2]="big min"

  [root@www ~]# var[3]="nice min"

  [root@www ~]# echo "${var[1]}, ${var[2]}, ${var[3]}"

  small min, big min, nice min

  阵列的变数类型比较有趣的地方在于『读取』,一般来说,建议直接以 ${阵列} 的方式来读取,比较正确无误的啦!


文章源自谷搜企业邮箱服务商 变数键盘读取(read)、阵列(array)与宣告(declare)
  评论这张
 
阅读(3)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017