bash脚本(上)

vim中插入按i
保存并退出换行按esc然后输入:wq再enter
#! 是说明 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/null 或 whereis bash 这三个命令找出 bash 所在的位置;
如果仍然找不到,那你可能需要自己动手安装一个 BASH 软件包了。
第二行的 "# This is a ..." 就是 BASH 程序的注释,
在 BASH 程序中从“#”号(注意:后面紧接着是“!”号的除外)开始到行尾的部分均被看作是程序的注释。
第三行的 echo 语句的功能是把 echo 后面的字符串输出到标准输出中去。
由于 echo 后跟的是 "Hello World" 这个字符串,
因此 "Hello World"这个字串就被显示在控制台终端的屏幕上了。
需要注意的是 BASH 中的绝大多数语句结尾处都没有分号。


运行Bash脚本的方式:
# 使用shell来执行
$ sh hello.sh
# 使用bash来执行
$ bash hello.sh
使用.来执行
$ . ./hello.sh
使用source来执行
$ source hello.sh
还可以赋予脚本所有者执行权限,允许该用户执行该脚本
$ chmod u+rx hello.sh
$  ./hello.sh


使用脚本清除/var/log下的log文件
首先我们看一看/var/log/wtmp里面有啥东西
cat /var/log/wtmp
这个文件中记录了系统的一些信息,现在我们需要写一个脚本把里面的东西清空,
但是保留文件
$ vim cleanlogs.sh
说明:
/dev/null这个东西可以理解为一个黑洞,里面是空的(可以用cat命令看一看)
#!/bin/bash
# 初始化一个变量
LOG_DIR=/var/log
cd $LOG_DIR
cat /dev/null > wtmp
echo "Logs cleaned up."
exit
运行脚本前,先使用 sudo chmod +x cleanlogs.sh 授予脚本执行权限,
然后再看看 /var/log/wtmp 文件内是否有内容。运行此脚本后,文件的内容将被清除。
执行
由于脚本中含有对系统日志文件内容的清除操作,
这要求要有管理员权限.不然会报permission denied错误
使用sudo命令调用管理员权限才能执行成功:
$ sudo ./cleanlogs.sh
#!/bin/bash这一行是表示使用/bin/bash作为脚本的解释器,
这行要放在脚本的行首并且不要省略


行首以 # 开头(除#!之外)的是注释。#!是用于指定当前脚本的解释器,
我们这里为bash,且应该指明完整路径,所以为/bin/bash
当然,在echo中转义的 # 是不能作为注释的:
$ vim test.sh


分号(;)
1.命令分隔符
使用分号(;)可以在同一行上写两个或两个以上的命令。
2.终止case选项(双分号)
使用双分号(;;)可以终止case选项。


点号(.)
等价于 source 命令
bash 中的 source 命令用于在当前 bash 环境下读取并执行 FileName.sh 中的命令。
$ source test.sh
Hello World
$ . test.sh
Hello World


.斜线(/)
文件名路径分隔符。分隔文件名不同的部分也可以用来作为除法算术操作符。
注意在linux中表示路径的时候,许多个/跟一个/是一样的


.反斜线(\)
一种对单字符的引用机制。\X 将会“转义”字符X。这等价于"X"
,也等价于'X'。\ 通常用来转义双引号(")和单引号('),
这样双引号和单引号就不会被解释成特殊含义了。
符号 说明
\n 表示新的一行
\r 表示回车
\t 表示水平制表符
\v 表示垂直制表符
\b 表示后退符
\a 表示"alert"(蜂鸣或者闪烁)
\0xx 转换为八进制的ASCII码, 等价于0xx
" 表示引号字面的意思
转义符也提供续行功能,也就是编写多行命令的功能。
每一个单独行都包含一个不同的命令,
但是每行结尾的转义符都会转义换行符,
这样下一行会与上一行一起形成一个命令序列。

反引号(`)
命令替换
反引号中的命令会优先执行,如:
$ cp `mkdir back` test.sh back
$ ls
先创建了 back 目录,然后复制 test.sh 到 back 目录

冒号(:)
1.空命令
等价于“NOP”(no op,一个什么也不干的命令)。
也可以被认为与shell的内建命令true作用相同。
“:”命令是一个bash的内建命令,它的退出码(exit status)是(0)。
2.变量扩展/子串替换
在与>重定向操作符结合使用时,将会把一个文件清空,
但是并不会修改这个文件的权限。如果之前这个文件并不存在,那么就创建这个文件


问号(?)
测试操作符
在一个双括号结构中,? 就是C语言的三元操作符

美元符号($)
变量替换

你可能感兴趣的:(运维)