bash学习记录(一)初识bash和特殊字符
初识Bash
鉴于本人的表达能力,不适合想要去系统学习bash的人来查看,提前分享两个不同阶段,不同人群学习的资料。
想要学习bash但是不想学习太深的人: bash-handbook
想要系统学习bash的人:Advanced Bash-Scripting Guide
其实bash很难,要考虑的东西很多,但现在学到的只是皮毛,希望能够多看多实践,才能更进一步。
Starting Off With a Sha-Bang
sha-bang(#!)在起始的位置来告诉你的系统这个文件是命令的集合,能够使用哪个命令解释器来执行(/bin/bash)->path,这个命令路径必须正确
如果系统默认解释器是/bin/bash 或者其他 则不用使用 #! /bin/bash 来放到开头
Special Characters
下面来简单总结一下有特殊意义的字符
‘#‘ 跟在#号后面的相当与是注释,不会被解释器执行,可以出现单行,也可以出现在命令后作注释用
; 分号 允许将多条命令放到单行用
;; 两个分号,在
case
的场景下使用 如1
2
3
4
5
6
7case "$variable" in
abc) echo "\$variable = abc" ;;
xyz) echo "\$variable = xyz" ;;
esac. dot
相当与linux的内建命令source
作为文件名的一部分 如 .vimrc等
作为目录导向 如 ./表示当前目录 ../相当与父目录
正则表达式中可以表示为1个字符
“ 双引号 部分引用字符串,大部分还是字符串,但是能够引用变量 ‘$value’,并且特殊字符需要转义
‘ 单引号 可以保存全部特殊字符,不能引用变量
, 逗号 表示连接多个计算表达式,多个表达式都会执行,但是只有最后一个计算式会返回值 。也做链接字符串
1
2let "t2 = ((a = 9, 15 / 3))"
# Set "a = 9" and "t2 = 15 / 3"\ 反斜杠
escape [backslash]
可是实现对单个字符的转义/ 斜杠
Filename path separator [forward slash]
本身就叫做文件分割符可以明了做什么用的了`
command substitution
命令替换 如 a=`echo “hello world” `;echo $a 等 或者 a=`date` ; echo $a: 冒号 空命令等价与‘NOP’
do-nothing operation
也是有状态的相当与内建函数true
比如1
2
3
4
5
6
7
8
9
10
11
12
13while :
do
operation-1
operation-2
...
operation-n
done
# Same as:
# while true
# do
# ...
# done作if判断的分支
1
2
3
4
5if condition
then : # Do nothing and branch ahead
else # Or else ...
take-some-action
fi放在必须要有两元操作的地方作为分隔符,如:: ${username=`whoami`}
配合管道命令
:>
:>>
如果文件没有存在则创建做分割符 如 echo $PATH 会出现很多以:作为分割符的字符串
在函数里可以作为站位符防止函数提为空
!叹号 作为
非
出现 如 !null 或者退出码 exit code。在不同的语境下可以作为间接变量引用。* 星号 可以作为全匹配来使用 如 echo * 。 表示乘法 1*2
? 问号
test operator
. Within certain expressions, the ? indicates a test for a condition. 还可以作为匹配任意单个字符。$ 变量引用 正则表达式中表示行尾
${} 变量引用
$(…) 多个变量同时引用
1
2
3file1="file"
file2="nofile"
echo $'file1,file2'输出内容:file1,file2
$* $@
位置参数 $*是将所有参数作为一个整体返回(字符串),而$@是将每个参数作为单元返回一个参数列表() 小括号
- 操作组
(a=hello; echo $a)
- 数组初始化
{} 花括号扩展 用来扩展参数 如 abou{t,y,u}
[] 中括号
- shell内建测试的一部分
- 表达数组的部分如array[1]
- 表示字符集的范围,在正表达式中,方括号表示该位置可以匹配的字符集范围。
[[]] 双中括号(double brackets)。
这个结构也是测试,测试[[]]之中的表达式(Shell的关键字)。这个比单中括号更能防止脚本里面的逻辑错误
$[ … ] and (()) 都表示Integer计算 integer expansion.
1 | a=3 |
| 管道 非常基础的概念 如 ls|grep .. 。
&:后台执行 && 和 || :逻辑操作符
+ - * % 各自意义就不详细解释了
资料引用 Advanced Bash-Scripting Guide 文章特别详尽,有兴趣非常鼓励看原文。这里我只做了部分比较常用的比较容易理解的部分做了精简(原谅我英文不好 :) 破产版总结 - - )。
作为bash学习总结的第一篇文章,篇幅不大,尽量做到简单,详尽易懂。当遇到问题能够回头看一看,希望能够起到好的作用!!