zoukankan      html  css  js  c++  java
  • redo/declare/typeset

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

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

    [dmtsai@study ~]$ read [-pt] variable
    选项与参数:
    -p :后面可以接提示字符!
    -t :后面可以接等待的“秒数!”这个比较有趣~不会一直等待使用者啦!
    范例一:让使用者由键盘输入一内容,将该内容变成名为 atest 的变量
    [dmtsai@study ~]$ read atest
    This is a test <==此时光标会等待你输入!请输入左侧文字看看
    [dmtsai@study ~]$ echo ${atest}
    This is a test <==你刚刚输入的数据已经变成一个变量内容!
    范例二:提示使用者 30 秒内输入自己的大名,将该输入字串作为名为 named 的变量内容
    [dmtsai@study ~]$ read -p "Please keyin your name: " -t 30 named
    Please keyin your name: VBird Tsai <==注意看,会有提示字符喔!
    [dmtsai@study ~]$ echo ${named}
    VBird Tsai <==输入的数据又变成一个变量的内容了!
    

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

    declare / typeset

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

    [dmtsai@study ~]$ declare [-aixr] variable
    选项与参数:
    -a :将后面名为 variable 的变量定义成为阵列 (array) 类型
    -i :将后面名为 variable 的变量定义成为整数数字 (integer) 类型
    -x :用法与 export 一样,就是将后面的 variable 变成环境变量;
    -r :将变量设置成为 readonly 类型,该变量不可被更改内容,也不能 unset
    范例一:让变量 sum 进行 100+300+50 的加总结果
    [dmtsai@study ~]$ sum=100+300+50
    [dmtsai@study ~]$ echo ${sum}
    100+300+50 <==咦!怎么没有帮我计算加总?因为这是文字体态的变量属性啊!
    [dmtsai@study ~]$ declare -i sum=100+300+50
    [dmtsai@study ~]$ echo ${sum}
    450 <==瞭乎??

    由于在默认的情况下面, bash 对于变量有几个基本的定义:

    变量类型默认为“字串”,所以若不指定变量类型,则 1+2 为一个“字串”而不是“计算式”。
    所以上述第一个执行的结果才会出现那个情况的;
    bash 环境中的数值运算,默认最多仅能到达整数形态,所以 1/3 结果是 0

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

    范例二:将 sum 变成环境变量
    [dmtsai@study ~]$ declare -x sum
    [dmtsai@study ~]$ export | grep sum
    declare -ix sum="450" <==果然出现了!包括有 i 与 x 的宣告!
    范例三:让 sum 变成只读属性,不可更动!
    [dmtsai@study ~]$ declare -r sum
    [dmtsai@study ~]$ sum=tesgting
    -bash: sum: readonly variable <==老天爷~不能改这个变量了!
    范例四:让 sum 变成非环境变量的自订变量吧!
    [dmtsai@study ~]$ declare +x sum <== 将 - 变成 + 可以进行“取消”动作
    [dmtsai@study ~]$ 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] 的变量。
    [dmtsai@study ~]$ var[1]="small min"
    [dmtsai@study ~]$ var[2]="big min"
    [dmtsai@study ~]$ var[3]="nice min"
    [dmtsai@study ~]$ echo "${var[1]}, ${var[2]}, ${var[3]}"
    small min, big min, nice min
    

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

    来源:鸟哥私房菜

     

     

  • 相关阅读:
    【转】jar参数运行应用时classpath的设置方法
    【转】命令行执行main方法
    【转】JAVA下的多线程程序造成系统时钟变快
    Spring MVC学习总结(6)——一些Spring MVC的使用技巧
    Spring MVC学习总结(6)——一些Spring MVC的使用技巧
    Maven学习总结(21)——Maven常用的几个核心概念
    专访李智慧:架构是最高层次的规划和难以改变的决定
    华为架构师8年经验谈:从单体架构到微服务的服务化演进之路
    华为架构师8年经验谈:从单体架构到微服务的服务化演进之路
    Spring学习总结(12)——Druid连接池及监控在spring配置
  • 原文地址:https://www.cnblogs.com/luck666/p/10394596.html
Copyright © 2011-2022 走看看