玩转Bash脚本:变量基本概念及其初始化
2014-08-06 17:26
435 查看
总第2篇
基本概念
只能包含字母、数字和下划线,并且不能以数字开头
大小写敏感
不能和系统变量重名
除此以外,如果要导出为全局变量,名称最好要全部大写。这只是一种习惯的约定,并非严格的约束。
类型
几乎所有的编程语言都有变量的概念,Bash当然也不例外。说道变量就少不了说一说类型。但与其他语言不同的是Bash属于无类型语言,如果强要说一种类型,可以认为都是字符串。说到这里,你可能会说,Bash里面也有整数类型吧,好像有整数的运算。但其是通过一些运算符,表达式或者命令将字符串视作整数处理的,其本质还是字符串。
Jelly:hello world!
需要注意的是等号左右不能有空格!!!有其他语言编程经验的程序员,可能经常通过增加空格来使代码变得美观。然而这在Bash中是不允许的。
存在的即是合理的,这样限制的道理是,如果你写作 a = 123。那么系统会将视作你在执行一个命令a 而= 和123都是这个命令的参数。能够直接在脚本内部调用各种系统命令是Bash的与众不同之处,并且没有硬性的规定说过等于号=不能作为命令的参数。
关于引号
其次要理解的是,由于刚才说过的所有变量都可视作字符串,所以其实a=123和a=“123”没什么不同。不过如果你的变量包含空格就一定需要用引号来包裹了。
关于单引号和双引号一般情况下作用相同,除了某些特殊情况:
或者可以使用read命令的 -p 选项来简化上述代码:
。
注意
有的命令的打印结果是一行一行的,但是使用反引号赋值的时候,变量是不会保存\n符的,会以空格来替换掉这些换行符,这样再echo的时候会发现原先的每一行都打印到了一行。懒得贴代码了,大家直接看这个过程的截图吧:
除此之外,还有另外一种命令替换的格式——$( )
比如上面的内容可写作
dir=$(dir)
tim=$(date)
两种替换方式的区别在于:
` `内部需要进行转义才能嵌套使用命令替换如a=`cmd1 `cmd2``,是错误的,需要[b]a=`cmd1 \`cmd2\``。而$()可以直接a=$(cmd1 $(cmd2))。
此外一些其他特殊字符,在` `内部也需要转义。
[/b]
看懂了吗?本期教程结束,下次再见
。
本系列(玩转Bash脚本)更多文章,请访问:http://blog.csdn.net/column/details/wanbash.html
基本概念
命名
注意以下规则:只能包含字母、数字和下划线,并且不能以数字开头
大小写敏感
不能和系统变量重名
除此以外,如果要导出为全局变量,名称最好要全部大写。这只是一种习惯的约定,并非严格的约束。
类型
几乎所有的编程语言都有变量的概念,Bash当然也不例外。说道变量就少不了说一说类型。但与其他语言不同的是Bash属于无类型语言,如果强要说一种类型,可以认为都是字符串。说到这里,你可能会说,Bash里面也有整数类型吧,好像有整数的运算。但其是通过一些运算符,表达式或者命令将字符串视作整数处理的,其本质还是字符串。新建变量
Bash中的变量和其他脚本语言一样,都是无需声明,直接拿来用的。所以变量的第一次出现都是伴随着初始化的。关于初始化本文第二部分有详细介绍。取用变量
变量前加一个 $ 符号。称作dollar符,就是美元符号。这是最基本的一种取用方式,其他的方式以后再表。a="hello world" echo $a终端会打印出 hello world。当然你可以把变量和常量字符串放到一起来打印,比如
boy=Jelly echo "$boy:hello world!"结果为
Jelly:hello world!
初始化/赋值
Bash中的变量由于无需声明,所以第一次出现都会伴随初始化。Bash中的变初始化(或赋值)方式共有三种:直接赋值、读取输入和命令替换。直接赋值
直接赋值就是使用一个等于号了,这在其他编程语言里也很常见,比如:a=123 b=abc c=‘123’ d=“hello world”注意空格
需要注意的是等号左右不能有空格!!!有其他语言编程经验的程序员,可能经常通过增加空格来使代码变得美观。然而这在Bash中是不允许的。
存在的即是合理的,这样限制的道理是,如果你写作 a = 123。那么系统会将视作你在执行一个命令a 而= 和123都是这个命令的参数。能够直接在脚本内部调用各种系统命令是Bash的与众不同之处,并且没有硬性的规定说过等于号=不能作为命令的参数。
关于引号
其次要理解的是,由于刚才说过的所有变量都可视作字符串,所以其实a=123和a=“123”没什么不同。不过如果你的变量包含空格就一定需要用引号来包裹了。
关于单引号和双引号一般情况下作用相同,除了某些特殊情况:
a="I'm Jelly" b='Jelly:"Hi"' echo $a echo $b当字符串中含有单引号那么外面要用双引号,反之亦然。
读取输入
读取终端的输入给变量赋值,就是使用read命令。read和echo一样都是内嵌命令。直接看代码:echo -n "Please Input your name:" read name echo "Hi,$name,welcome to uncle Jelly's cabin!"
或者可以使用read命令的 -p 选项来简化上述代码:
read -p "Please Input your name:" name echo "$name,welcome to uncle jelly's cabin!"直接结果与前面的代码相同。关于read命令的更多用法,请自行 man read
。
命令替换
这是非常实用的一种初始化或赋值的方式。利用其他命令的输出来给一个变量赋值。这需要用到反引用符号` `这是数字键1左边的符号,可不是单引号。dir=`pwd` tim=`date` echo "我在$dir目录下" echo "现在时间是$time"这里调用了pwd和date两个命令。你可以直接在终端键入这两个命令试试,看看打印结果。反引号就是把这个结果给赋值了。
注意
有的命令的打印结果是一行一行的,但是使用反引号赋值的时候,变量是不会保存\n符的,会以空格来替换掉这些换行符,这样再echo的时候会发现原先的每一行都打印到了一行。懒得贴代码了,大家直接看这个过程的截图吧:
除此之外,还有另外一种命令替换的格式——$( )
比如上面的内容可写作
dir=$(dir)
tim=$(date)
两种替换方式的区别在于:
` `内部需要进行转义才能嵌套使用命令替换如a=`cmd1 `cmd2``,是错误的,需要[b]a=`cmd1 \`cmd2\``。而$()可以直接a=$(cmd1 $(cmd2))。
此外一些其他特殊字符,在` `内部也需要转义。
[/b]
其他
其他初始化的方式,比如用一些特殊的变量。举一例RANDOM,这是一个特殊的变量,你每一次 echo $RANDOM。打印的结构都不一样。当然你可以用它来实现给变量赋随机值。a=$RANDOM b=$RANDOM c=$RANDOM自己打印一下这三个变量的值吧。
看懂了吗?本期教程结束,下次再见
。
本系列(玩转Bash脚本)更多文章,请访问:http://blog.csdn.net/column/details/wanbash.html
相关文章推荐
- 玩转Bash脚本:特殊变量
- shell编程基本概念及其变量类型
- Unity3D 脚本及变量 -- 基本概念
- 二维数组的定义(动态初始化、静态初始化)、初始化格式及其操作、java中的参数传递方式,面向对象的基本概念
- Bash玩转脚本5之Windows上修改环境变量的脚本系统
- 玩转Bash脚本:特殊变量
- ORACLE表空间及其维护基本概念
- 有关PowerShell脚本你必须知道的十个基本概念
- gawk脚本中使用bash脚本变量
- Flex基本概念及其事件机制
- 浅谈SQL基本概念及其用法
- 有关PowerShell脚本你必须知道的十个基本概念
- 多线程的基本概念及其简单应用
- Linux 基本系统初始化脚本第一版 推荐
- [RedHat笔记]第二课:时间表示、帮助命令、文本查看命令、实现用户管理及权限、BASH、变量、脚本
- Eclipse 工作台基本概念>路径变量
- 使用Bash编写Linux Shell脚本-5.变量
- 【BASH】脚本接触之shell变量
- 基本类型的成员变量(attribute)会被自动初始化,但局部变量(variable)就不会被自动初始化。
- 闪存的一些基本概念及其技术融合趋势(二)