bash基本语法

来源:互联网 发布:淘宝客退款还算佣金吗 编辑:程序博客网 时间:2024/05/16 07:57

本文就是自己整理的一个入门说明。
先贴个例子:

#!/bin/bashlines=0while read -r linedo    let lines=lines+1    if(($lines == 10));then        echo "$line"    fi done<file.txt

注释

对于一门脚本语言,我首先思考的问题是怎么注释。
#是bash中的注释符号。
然后你特么发现第一行不是被注释掉么?
其实一开始我也纳闷。
毕竟解析器是也是软件。
它并不一定一看到#就全部忽略整行。
这个解释有点勉强?
确实的。
其实我们需要重新理解注释。
注释的意思可以是解释器不去执行。
但却可以给系统加载该脚本时提供信息。
从这个意义上来说#!确实是注释。
只是这个注释是告诉系统用那个shell去执行。
而最后真正执行的shell是会忽略掉这行的。
这玩意在unix geek眼里一般叫shebang。
所以这玩意对程序加载器来说是有用的。
而且还可以在这一行里传参数。
对最终的解释器来说又确实和注释一样不产生作用。
更好的解释在这里
毕竟脚本可以用任何语言写成。
其实如果你不加这一行也是可以的。
一个注释扯这么多有点无聊。


变量

说完注释说变量
bash的变量真牛逼
直接定义
比如
state=looksgood
不过还是建议加上引号
state=’looksgood’
引号在字串中间有空格是必须的
那如何引用?
变量前加echostate
注意变量赋值时=号两端不要有空格
原因是shell将每一行命令视为命令及其参数的集合
以空格分隔

条件语句

变量说完自然就要比较
条件语句如何对比?
条件语句语法自然是 if语法
参见文章最开始的例子
套用下官方的语法:

if test-commands; then    consequent-commands;[elif more-test-commands; then    more-consequents;][else alternate-consequents;]fi

尼玛,感觉瞬间高大上。
语法看起来简单,那就看看如何比较。
套用官方文档:

Conditional expressions are used by the [[ compound command and the test and [ builtin  commands.

好想有三种条件表达式语法。
据说比较形式很多种,既然我也没入门那就说简单的:

  • [] 比较运算,根据参数不同而不同,详见manual吧
    这里举个例子:

    if [ expression ]

其中express可以为:

if [ '$state' = 'looksgood' ] ; then    echo "yes"fi

循环

说完条件说循环
bash中多钟循环

until test-commands; do consequent-commands; donewhile test-commands; do consequent-commands; donefor name [ [in [words ...] ] ; ] do commands; done

还是那句话,预知详情,请看文档,因为文档实在写的比我好多。

数据输入

0 0
原创粉丝点击