关闭

bash基本语法

426人阅读 评论(0) 收藏 举报
分类:

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

#!/bin/bash
lines=0
while read -r line
do
    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; done
while test-commands; do consequent-commands; done
for name [ [in [words ...] ] ; ] do commands; done

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

数据输入

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    文章分类