Bash入门

来源:互联网 发布:网络招聘 编辑:程序博客网 时间:2024/05/22 01:41

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

17.波浪号:~,表示主工作目录

今天介绍的这些都是简单基本的bash的常用字符,只是一个小小的铺垫吧,之后会详细写一下bash编程。

0 0