shell脚本基础知识1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wudinaniya/article/details/82929194

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命令常见的用法,如下表所示:

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 指令用于查找符合条件的文件或目录。任何位于参数之前的字符串都将被视为欲查找的目录。

语  法:find [目录...][-amin <分钟>][-anewer <参考文件或目录>][-atime <24小时数>][-cmin <分钟>][-cnewer <参考文件或目录>][-ctime <24小时数>][-daystart][-depyh][-empty][-exec <执行指令>][-false][-fls <列表文件>][-follow][-fprint <列表文件>][-fprint0 <列表文件>][-fprintf <列表文件><输出格式>][-fstype <文件系统类型>][-gid <群组识别码>][-group <群组名称>][-help][-ilname <范本样式>][-iname <范本样式>][-inum <inode编号>][-ipath <范本样式>][-iregex <范本样式>][-links <连接数目>][-lname <范本样式>][-ls][-maxdepth <目录层级>][-mindepth <目录层级>][-mmin <分钟>][-mount] 
[-mtime <24小时数>][-name <范本样式>][-newer <参考文件或目录>][-nogroup][noleaf] [-nouser][-ok <执行指令>][-path <范本样式>][-perm <权限数值>][-print][-print0][-printf <输出格式>][-prune][-regex <范本样式>][-size <文件大小>][-true][-type <文件类型>][-uid <用户识别码>][-used <日数>][-user <拥有者名称>][-version][-xdev][-xtype <文件类型>]

参数:

-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


 

猜你喜欢

转载自blog.csdn.net/wudinaniya/article/details/82929194
今日推荐