bash学习笔记(1)-----bash初步及介绍

Bash学习笔记

简介:

Bash(GNU Bourne-Again Shell)是一个为GNU计划编写的Unix shell,它是许多Linux平台默认使用的shell。

shell是一个命令解释器,是介于操作系统内核与用户之间的一个绝缘层。准确地说,它也是能力很强的计算机语言,被称为解释性语言或脚本语言。它可以通过将系统调用、公共程序、工具和编译过的二进制程序”粘合“在一起来建立应用,这是大多数脚本语言的共同特征,所以有时候脚本语言又叫做“胶水语言”

事实上,所有的UNIX命令和工具再加上公共程序,对于shell脚本来说,都是可调用的。Shell脚本对于管理系统任务和其它的重复工作的例程来说,表现的非常好,根本不需要那些华而不实的成熟紧凑的编译型程序语言。

Hello world!

# hello.sh
#!/bin/bash
echo Hello World

#! 是说明 hello 这个文件的类型的,有点类似于 Windows 系统下用不同文件后缀来表示不同文件类型的意思(但不相同)。

Linux 系统根据 “#!” 及该字串后面的信息确定该文件的类型,可以通过 man magic命令 及 /usr/share/magic 文件来了解这方面的更多内容。

在 BASH 中 第一行的 “#!” 及后面的 /bin/bash 就表明该文件是一个 BASH 程序,需要由 /bin 目录下的 bash 程序来解释执行。BASH 这个程序一般是存放在 /bin 目录下,如果你的 Linux 系统比较特别,bash 也有可能被存放在 /sbin 、/usr/local/bin 、/usr/bin 、/usr/sbin 或 /usr/local/sbin 这样的目录下;如果还找不到,你可以用 locate bash ,find / -name bash 2>/dev/nullwhereis bash 这三个命令找出 bash 所在的位置;如果仍然找不到,那你可能需要自己动手安装一个 BASH 软件包了。

重定向的使用

比如我们想要保存刚刚的hello world为一个文本,那么该怎么办呢?

> 这个符号是重定向,执行以下代码,就会在当前目录下生成一个my.txt。打开看看有没有hello world

 #!/bin/bash
 echo "Hello World" > my.txt

使用脚本清除/var/log下的log文件

首先我们看一看/var/log/messages和/var/log/wtmp里面有啥东西

cat /var/log/wtmp

以上这两个文件中记录了系统的一些信息,现在我们需要写一个脚本把里面的东西清空,但是保留文件

说明:

/dev/null这个东西可以理解为一个黑洞,里面是空的(可以用cat命令看一看),什么东西都可以往里面扔,扔了就没了

#!/bin/bash
# 初始化一个变量
LOG_DIR=/var/log
cd $LOG_DIR
cat /dev/null > wtmp
echo "Logs cleaned up."
exit

运行脚本前,先看看 /var/log/ 下文件内是否有内容。运行此脚本后,文件的内容将被清除。

执行

  • 由于脚本中含有对系统日志文件内容的清除操作,这要求要有管理员权限.不然会报permission denide错误

    使用sudo命令调用管理员权限才能执行成功:

  • #!/bin/bash这一行是表示使用/bin/bash作为脚本的解释器,这行要放在脚本的行首并且不要省略

  • 脚本正文中以#号开头的行都是注释语句,这些行在脚本的实际执行过程中不会被执行。这些注释语句能方便我们在脚本中做一些注释或标记,让脚本更具可读性。

思考练习

1. 遇到权限不够的提示,为什么,如何解决?

权限不够加sudo啊,可是你会发现

sudo cat /dev/null > /var/log/wtmp

一样会提示权限不够,为什么呢?因为sudo只能让cat命令以sudo的权限执行,而对于>这个符号并没有sudo的权限,我们可以使用

sudo sh -c "cat /dev/null > /var/log/wtmp "

让整个命令都具有sudo的权限执行

2. 为什么cleanlogs.sh可以将log文件清除?

因为/dev/null ,里面是空的,什么东西都可以往里面扔,扔了就没了

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注