我为何选择tcl而不是bash来编写日常的自动化脚本
2016-03-25 15:09
393 查看
为了编写一些自动化的脚本我学习bash好几回,可惜在需要用到的时候,发现已经忘得差不多了。就一个简单的if else语句,也会因为空格或缩进导致错误,还有复杂的语法规则,替换规则,令人望而却步。
##TCl的规则
一切都是字符串
一切都是命令 (单独一行,或者[]内嵌命令)
tcl的规则只有这样两条!简直不可思议,但它真的会工作。每次写tcl脚本的时候,只要在脑子里面过一下这两条规则基本上就不会错了。
字符串不是以引号什么来区分(因为一切都是字符串),双引号的作用是将多个词组织起来,使得在某些场景下看起来是一个单位。
列表什么的也是字符串,在需要看到list的时候,字符串就是list。挺玄妙的吧:)
没有关键字,都是命令
if仅仅是一个命令,和puts一样,没有特殊性。{}不是代码块的分隔符!,在tcl里面{}和""的作用相似,起到组合作用,只是""里面的变量会替换,{}不作替换。
数字也是字符串,只是需要看到数字的时候就是数字而已。
以上列举的内容,从其它语言使用者角度来看是比较奇特的。有空仔细琢磨tcl的这两个规则,一旦贯通,编写tcl脚本就很顺手了。
以下网址是我最近用tcl脚本编写的一些用在vagrant provision的脚本,用来简化开发环境的部署。
https://github.com/jianglibo/cld
##TCl的规则
一切都是字符串
一切都是命令 (单独一行,或者[]内嵌命令)
tcl的规则只有这样两条!简直不可思议,但它真的会工作。每次写tcl脚本的时候,只要在脑子里面过一下这两条规则基本上就不会错了。
一切都是字符串
先介绍一个命令puts,相当于println.puts a"b puts 'abc
字符串不是以引号什么来区分(因为一切都是字符串),双引号的作用是将多个词组织起来,使得在某些场景下看起来是一个单位。
puts a b #puts看到2个参数的话,会把第一个当作文件句柄,此段代码会出错 puts "a b" #这样对puts来说就是一个参数
列表什么的也是字符串,在需要看到list的时候,字符串就是list。挺玄妙的吧:)
string length "a b" #string主命令,length次命令,"a b"是参数,注意这个参数值不包括",它只是起到一个组合的作用。命令的结果是3。 llength "a b" #llength是获取列表长度的命令,它希望看到的是list,那么参数就是list。结果是2 llindex "a b" 0 #结果是a
没有关键字,都是命令
if 1 { puts hello }
if仅仅是一个命令,和puts一样,没有特殊性。{}不是代码块的分隔符!,在tcl里面{}和""的作用相似,起到组合作用,只是""里面的变量会替换,{}不作替换。
数字也是字符串,只是需要看到数字的时候就是数字而已。
expr 1 + "2" #注意双引号不属于值,所以2 == "2" == {2}
以上列举的内容,从其它语言使用者角度来看是比较奇特的。有空仔细琢磨tcl的这两个规则,一旦贯通,编写tcl脚本就很顺手了。
以下网址是我最近用tcl脚本编写的一些用在vagrant provision的脚本,用来简化开发环境的部署。
https://github.com/jianglibo/cld
相关文章推荐
- Shell脚本语法
- shell 学习之for语句
- Linux系统远程登录Shell
- linux命令--bash进阶
- linux --- shell command
- Hbase shell详情
- shell-数组
- linux命令---bash基础
- [常用shell命令] 批量替换文件内容和文件名
- shell 逐行读取文件
- LINUX C 语言 快速获取调用SHELL命令后的结果
- linux shell 1
- shell判断字符串为空
- linux下shell脚本学习
- 关于 shell 脚本编程的10 个最佳实践
- 73条日常Linux shell命令汇总,总有一条你需要!
- IT_linux_shell_awk_sed_100篇--awk--例子
- jline初步了解
- ssh web版工具shellinabox解析
- 数据工程师常用的 Shell 命令