Bash简介:
Bash(GNU Bourne-Again Shell)是一个为GNU计划编写的Unix shell,它是许多Linux平台默认使用的shell。
shell是一个命令解释器,是介于操作系统内核与用户之间的一个绝缘层。准确地说,它也是能力很强的计算机语言,被称为解释性语言或脚本语言。
不管学习哪种语言,我们程序猿编写的第一个程序就是:hello world,shell脚本也不例外。
vim hello.sh
运行shell脚本的方式:
sh hello.sh
bash hello.sh
或者可以给其添加可执行权限:
chmod u+x hello.sh
./hello.sh
下面来描述一个小的脚本程序(用于清除/var/log下的log文件):
vim cleanlogs.sh
/dev/null 是指内容为空
运行脚本后,就可以清除文件啦。
可是,原因是什么呢,,为什么这样就可以清除文件了呢。首先,是因为 /dev/null 是指内容为空,将空的内容写进messages和wtmp中,就会使文件的内容全部为空,这样就清空了。
入门Bash:
1. Bash中#是代表注释的意思,(如果需要用到’#’字符的话,需要转义为\#哦)#!用于解释当前脚本的解释器,这里用的是bash,所以用全路径/bin/bash。
2. 在shell脚本中是用;作为命令分隔符,一行中如果有分号,则还可以写其他命令。
我们还是以一个例子来说明吧:
这个例子是检测是否有ttt.sh这个文件,如果有的话,输出文件存在,然后将其拷贝到ttt.sh.bak中,否则输出文件不存在,然后创建一个ttt.sh的文件。最后输出文件测试完成。(这里的条件分支,后续会具体讲到哦~)
执行脚本后sh hello.sh,结果为:
3. 我们用双分号”;;”来终止case命令,相当于是C语言中的break。
运行结果为:
123
4. 关于引号,主要有双引号和单引号
双引号:对引号中的字符串中的大部分特殊字符的解释进行阻止
单引号:对引号中的字符串中的大部分特殊字符的解释进行阻止
对于双引号来说,它会将双引号中的值当做是一个变量,而对于单引号,它会看成是一个字符串
5.关于斜线,有斜线,反斜线,一般情况下,斜线(/)看做是根目录,或者是路径分隔符,注意这里,一个斜线(/)和多个斜线()是一样的。那么,反斜线(\)的作用呢,是用来转义的,也可以转义单引号和双引号的内容,这里就会将单引号和双引号区分开来而不用被解释成特殊的字符。
6. 关于反引号,“将优先执行反引号中的内容;举个例子吧:
这里,我们将先执行mkdir back,创建好back目录后,再将test.sh拷贝到back目录下。
7.关于冒号,表示空,是shell的一个内建命令,其退出码为0。和C语言中的true类似。
这样的话,结果就会是一个永无止境的死循环了。一直输出endless loop
当然,:也可以什么都不做,当做一个占位符,如下例子:
结果为:
:还有另外一个作用是用于清空文件中的内容
:> test.sh
这时,就把test.sh中的内容清空了,文件权限等并不会受影响哦
:还用来做分隔符:
echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/sbin:/usr/sbin:/usr/games
8.关于问号,我们通常用在三目运算符中
9.关于$符号,我们用在变量替换中
结果为:
$还用于命令替换,
cd $(echo back)
pwd
10. 关于小括号,代表是子shell中创建的内容,所以在父脚本中不可见。如下:
结果为:
这个倒是和C语言中的作用域{ }有些类似。
11. 初始化数组,和C语言中的数组类似,只是这里是用空格将数据分隔开。
结果为:
12.关于大括号{ },在大括号中不允许有空白哦。可对于文件进行操作,其次可进行代码块的区分,也可以当做块域
13.关于中括号[ ],是条件测试的块域。之前写例子的时候也有所涉及,就不多说了。[ ]还用来表示数组的元素,例如arr[1];取元素的编号
14.尖括号>,>>,是重定向。前面也涉及到了。
test.sh > filename 重定向test.sh的输出到文件 filename 中。如果 filename 存在的话,那么将会被覆盖。
test.sh &> filename 重定向 test.sh 的 stdout(标准输出)和 stderr(标准错误)到 filename 中。
test.sh >&2 重定向 test.sh 的 stdout 到 stderr 中。
test.sh >> filename 把 test.sh 的输出追加到文件 filename 中。如果filename 不存在的话,将会被创建。
15.关于管道:|,这个之后会详细讲解
16.破折号,’-‘用于显示选项参数时经常会用到。
ls -l
if [ 5 -eq 0] then