1> echo 后面只能跟双引号,不能跟单引号
eg:
[root@docker ~]# echo "mysql backup end at `date`"
mysql backup end at Tue Oct 2 22:43:47 CST 2018
[root@docker ~]#
[root@docker ~]# echo 'mysql backup end at `date`'
mysql backup end at `date`
注意: `date` 使用的是反引号,反引号的作用为获取命令的结果并返回。
2> 脚本中第一行一般都是 #!/bin/bash
脚本第一行#!/bin/bash是固定格式,用来指定解释器bash的具体位置,前面的“#!”是必须要加上的。
eg:
[root@docker ~]# more abc.sh
#!/bin/bash
echo "mysql backup end at 'date'"
[root@docker ~]#
3> shell脚本中所有以“#”开头的行,都是解释说明的文字,这些注释文字用来对该脚本的描述,通常会写脚本的作用、作者以及时间或者版本等信息。
4> shell脚本中循环遍历,可以使用for,语法是 for ...;do ...; done
eg:
5> date命令
date在linux系统里可以显示当前的系统日期和时间。date命令示例如下:
[root@docker ~]# date 日期和时间
Tue Oct 2 23:15:58 CST 2018
[root@docker ~]# date +%F 日期 注意:加号和 %F 之间不能有空格,下同
2018-10-02
[root@docker ~]# date +%T 时间
23:16:07
[root@docker ~]# date -d "1 month ago" +%F 一个月以前的日期
2018-09-02[root@docker ~]# date -d "-2 month" +%F 两个月以前的日期
2018-08-04
[root@docker ~]# date+%F
-bash: date+%F: command not found
[root@docker ~]# date -d "1 day ago" +%F 昨天的日期(表示法一)
2018-10-01
[root@docker ~]# date -d "-1 day" +%F 昨天的日期(表示法二)
2018-10-01
[root@docker ~]#[root@solr1 bin]# date -d "-2 hour" +%T 两小时以前的时间
12:50:29[root@docker ~]# date -d "-2 day" +"%F %T" 前天的日期及时间
2018-10-03 20:47:33
下面我列出了一些date命令常见的用法,如下表所示:
6> mysql数据库备份
假设已知备份数据库的用户为root ,密码为123456abc,要备份的数据库为db1
命令如下:
[root@slave1 local]# mysqldump -uroot -p123456abc db1>db1.sql 注意:这样虽然会报警告,但不影响执行
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@slave1 local]# ls
bin db1.sql etc games include java lib lib64 libexec sbin share src
如果是远程的mysql服务,还可以加上IP和Port,例如将远程www.wudi.com服务器上的testtransaction数据库的数据备份到本机192.168.0.181上:
[root@master local]# mysqldump -hwww.wudi.com -P3306 -uroot -p123456 testtransaction>testtransaction.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@master local]# ls
bin etc games include java lib lib64 libexec sbin share src testtransaction.sql
7> find 命令 ----查找文件的复杂方式
locate 只能依据文件名来查找文件,而 find 程序能基于各种各样的属性,搜索一个给定目录(以及它的子目录),来查找文件。find 指令用于查找符合条件的文件或目录。任何位于参数之前的字符串都将被视为欲查找的目录。
|
参数:
-name <范本样式> 指定字符串作为寻找文件或目录的范本样式。
-perm <权限数值> 查找符合指定的权限数值的文件或目录。
-type <文件类型> 只寻找符合指定的文件类型的文件。
-size <文件大小> 查找符合指定的文件大小的文件。
find命令举例:
1)假设 /usr/local/static/ 下有两个文件a.txt、b.txt,还有一个文件夹tmp, 文件夹tmp中有一个文件 c.txt
[root@localhost static]# ls
a.txt b.txt tmp
[root@localhost static]# find /usr/local/static/ 查找出来的既包括当前目录也包括子目录及子目录下的文件
/usr/local/static/
/usr/local/static/tmp
/usr/local/static/tmp/c.txt
/usr/local/static/a.txt
/usr/local/static/b.txt对于/usr/local/static,当文件多时,这将产生一张很大的列表。因为这张列表被发送到标准输出,我 们可以把这个列表管道到其它的程序中。让我们使用 wc 程序来计算出文件的数量:
[root@localhost static]# find /usr/local/static/ |wc -l 使用 wc 来计算出文件的数量
5
eg:
2)找到 /usr/local/static 目录下的一周以前的老文件
find /usr/local/static/ -type f -mtime +7
3) 找到 /etc/ 目录及其子目录下所有文件名包含 .cnf的文件
[root@localhost static]# find /etc/ -type f -name "*.cnf*" 查找出来的只有文件
/etc/pki/tls/openssl.cnf
/etc/my.cnf
4)找到 /etc/ 目录及其子目录下所有目录名包含 .cnf 的目录
[root@localhost static]# find /etc/ -type d -name "*.cnf*" 查找出来的只有目录
/etc/my.cnf.d
5)找到当前目录下所有权限为700的目录(会去当前目录及当前目录的子目录中去查找)
[root@localhost ~]# find . -type d -perm 700
./.cache
./.cache/pip
./.cache/pip/http
./.cache/pip/http/f
./.cache/pip/http/f/e
./.cache/pip/http/f/e/d
./.cache/pip/http/f/e/d/0
./.cache/pip/http/f/e/d/0/e
./.ssh
6)找到 /usr/local/ 下大小超过1MB 的文件(会去/usr/local 及 /usr/local 的子目录中去查找)
find /usr/local/ -size +1M 注意查找出来的只有文件,不包含文件夹
7)找到当前目录下10天以前的文件并删除
find . -type f -mtime +10 -exec rm -f {} \; 会去当前目录及当前目录的子目录下查找,只查找文件并删除,并不会删除文件夹
8> gzip压缩/解压缩文件
gzip支持压缩(解压缩)文件,但不支持压缩(解压缩)目录
压缩一个文件的命令就是:
gzip file # 该文件被压缩为file.gz,被压缩后源文件file会被删除掉
解压缩一个压缩文件的命令是:
gzip -d file.gz # 使用gzip进行解压缩,要使用gzip命令的-d参数
在linux系统里,常见的压缩工具除了gzip外,还有bzip2,xz,zip等,其中bzip2和xz用法与gzip类似,而zip支持压缩目录。
注意:
使用gzip 命名,压缩或解压缩后会删除源文件,并在源文件位置生成新文件,新文件和源文件日期时间一致,不会自动更新。
实际运用举例:
把一天以前的数据库备份文件压缩:
[root@localhost ~]# find /usr/local/mysql_backup_data/ -name "*.sql" -mtime +1 |xargs gzip
把一天以前的数据库备份的数据压缩文件进行解压:
[root@localhost ~]# find /usr/local/mysql_backup_data/ -name "*.sql.gz" -mtime +1 |xargs gzip -d