本文就是自己整理的一个入门说明。
先贴个例子:
#!/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’
引号在字串中间有空格是必须的
那如何引用?
变量前加
比如echo
state
注意变量赋值时=号两端不要有空格
原因是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
还是那句话,预知详情,请看文档,因为文档实在写的比我好多。