今日Linux--变量键盘读取、数组与宣告:read,array,declare

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

read

要读取来自键盘输入的变量,就是用 read 这个指令了。这个指令最常被用在 shellscript 的撰写当中, 想要跟使用者对谈?用这个指令就对了。

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

选项与参数:

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

-t :后面可以接等待的『秒数!』这个比较有趣~不会一直等待使用者啦!

范例一:让用户由键盘输入一内容,将该内容变成名为 atest 的变量

[root@www ~]# read atest

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

[root@www ~]# echo $atest

This is atest<==你刚刚输入的数据已经变成一个变量内容!

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

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

Please keyin your name: VBirdTsai <==注意看,会有提示字符喔!

[root@www ~]# echo $named

VBirdTsai<==输入的数据又变成一个变量的内容了!

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

今日Linux--变量键盘读取、数组与宣告:read,array,declare

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

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

参考资料:

鸟哥私房菜http://linux.vbird.org/linux_basic/0320bash.php#variable_read

  

爱华网本文地址 » http://www.413yy.cn/a/25101012/104746.html

更多阅读

C#变长数组二 c 数组长度 变量

首先声明,这不是我写的,只是我看对你有用才贴上来的1、什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处:动态的增加和减少元素实现了IColle

指向数组的指针和指向指针的指针 c语言指向数组的指针

指向数组的指针:很多人以为“指向数组的指针”就是“指向指针的指针”,于是有人写这样的代码:int a[3][4];int **p = a;//错误  这个代码的错误之处在于a是一个数组,它的成员也是数组,所以a叫做“数组的数组”——C++中严格说来没有二

二维数组与数组指针的用法 二维数组指针传递

二维数组与数组指针的用法 严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针。既然指针变量的值是一个地址,那么这个地址不仅可以是变量的地址,也可以是其它数据结构

一维数组的定义、初始化和引用 一维数组初始化为0

一维数组的定义、初始化和引用一维数组的定义、初始化和引用1.一维数组的定义方式为:类型说明符 数组名[常量表达式](1)数组名的命名方法与变量名相同,遵循标识符命名规则;(2)数组是用方括号括起来的常量表达式,不能用圆括号;(3)常量表达式表

声明:《今日Linux--变量键盘读取、数组与宣告:read,array,declare》为网友把心活活掐死分享!如侵犯到您的合法权益请联系我们删除