shell脚本

Shell入门:

1、用户空间用来跑应用程序

2、shell程序用来做人机交互

3、shell程序以单行命令来执行,缺乏逻辑关系。

4、Python与shell的区别:使用shell来实现Linux的批量处理,而不是去开发应用程序

5、ipython:是Python的交互式shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数。

6、程序是执行某个功能的一段代码。程序必须包含的两个要素:指令(即命令),数据(由变量提供),还需要一个逻辑关系(可有可无)

7、date命令查看系统时间,hwclock(clock)命令查看硬件时间

8、chroot命令:切换根文件系统。l临时根文件系统,加载磁盘驱动文件

9、在开发语言中Tab键叫做制表符(\t,代表四个空格建)

10、bash的特性:

①命令历史(history)

作用:查看之前使用的命令

关于命令历史的文件(每个用户家目录下的.bash_history,在关机的时候会自动写入一次,重启后还会有。将内存中的命令历史手动写入:history -r)

关于命令历史的变量(环境变量)       查看环境变量:env、set(查看更详细的环境变量参数)

记录历史数量(HISTSIZE=1000)

(HISTCONTRUL=ignoredups(忽略重复的历史命令)

                             ignorespace(忽略空白开头的历史命令)

                             ignoreboths(两者都生效)

history的常长见操作:

1、history(查看所有历史命令)

2、!+编号(执行该条命令)

!$(重要):上一条命令的最后一个参数(快捷键:ESC+.)

常见选项:

-a 追加历史行到历史文件中

-d 删除

-c 清空

history # :显示最近#行的命令

②补全(Tab键作用:提示,自动补全命令,目录)

  inux目录需要遵循FHS(文件系统层次化标准)目录规则

③命令行展开

展开命令:{}

用一条命令创建以上的目录:

1
mkdir -pv mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys

date  基于date命令来创建目录

date+%F(输出年月日)

date+%H(输出时间的小时)

date+%M(输出时间的分钟)

date+%S(输出时间的秒)

date+%T(输出时间)

练习:通过for语句循环创建一个月的日志文件;.log 2019-08-6.http.log

1
2
3
4
5
6
7
touch `date +%F`.http.log
 
for in {1..30};do
 
         touch  `date +%Y-%m-$i`.http.log;
 
done

压缩工具(只能压缩文件,不能压缩目录):gzip、bzip2、xz(每一种压缩工具的压缩原理不同)

Tar(归档工具,可以对目录进行操作)的常见参数:-j:相当于bzip2,

-J:相当于xz;

-z:相当于gzip

Zcat用于查看压缩文件,且不解压

-c :创建压缩文件;

-x:相当于extract(可以不用指定解压工具)

-f:指定文件名(即给压缩的文件取名);

-v:显示详细信息;

-t:不解压查看内容,与zcat相同

例:tar cjvf 2018-08.http.log.bz2 2018-08-*.http.log

    Tar xvf 2018-08.http.log.bz2 -C abc

压缩文件:红色  执行文件:绿色     目录文件:蓝色

/代表目录分隔符

编写脚本,每天02:20备份/etc目录中的所有文件,名称为当天日期,且保存文件为压缩文件:

Crontab -e()

1
2
3
4
5
6
7
Crontab --20 2 * * * /root/xxx.sh
 
Vim xxx.sh
 
       #!/bin/bash
 
Tar cJvf  /var/`date +%F`.xz  /etc/<br>Chmod +x xxx.sh(给文件增加执行权限)

如何同步系统时钟和硬件时钟

cal命令:查看当前月份

Echo $?(变量,就是用来存放命令执行状态的变量,0表示成功,1-255表示失败状态)

常见错误状态 :127表示命令不对

                           2表示文件或目录不存在

                           13表示没有权限

在程序执行中,我们可以使用exit来手动指定放回的状态码,return是函数中指定的返回码

[$? -eq 0] && exit 0 || exit 1

④命令快捷键:

快捷键

功能

Tab键

补全命令或路径(不能补全时代表命令或路径有错)

Ctrl+d

退出当前用户环境,相当于exit,logout

Ctrl+l(小写的L)

清屏(clear)

Ctrl+c

终止,强行结束当前命令

Ctrl+Shift+c(Ctrl insert)

Ssh客户端里secureCRT里复制命令

Ctrl+Shift+v(Shifl insert)

Ssh客户端里secureCRT里粘贴复制的命令

Ctrl+a

使光标到命令的最开头

Ctrl+e

使光标到命令的结尾

Ctrl+u

剪切光标之前的命令

Ctrl+k

剪切光标之后的命令

Ctrl+r

进入一个交互式界面,根据输入的字符串搜索最近一次使用的命令

Ctrl+s

挂起系统

Ctrl+q

解除挂起

Ctrl+w

以空格为分隔符,去删除文件

 

⑤alias:别名

Alias cdnet=’cd /etc/sysconfig/network-scripts’  //这种方法定义alias只能在当前shell生效

/etc/profile(定义环境变量(所有用户))EXPORT(用来导入环境变量)

/etc/bashrc(定义本地变量(所有用户))

~/.bash_profile(定义环境变量(指定用户))

~/.bashrc(定义本地变量(指定用户))

区别:定义别名永久生效:将别名放在/etc/profile(全局生效)而~/.bashrc(当前用户生效)

在/etc/profile文件中手动加入环境变量后:要敲Sources /etc/profile  或者 . /etc/profile命令

⑥文件通配符:

(文件通配符不是正则表达式)

?  任意单个字符

*  任意长度的任意字符

[ ]  指定范围内的任意一个字符

[^] 指定范围内以外的任意一个字节

例:[^0-9A-Za-z]

指定字符类:

[:alnum:]:英文大小写字符以及数字。即A-Z a-z 0-9

[:alpha:]:英文大小写字符,即A-Z a-z

[:cntrl:]:键盘的控制按键

[:digit:]:数字,即0-9

[:graph:]:除去空格符(空格符和Tab键)外的其他所有符号  

[:lower:]:代表小写字符,即a-z  

[:print:]:任何可以被打印出来的字样  

[:punct:]:标点符号  

[;space;]:空白符(代表两个中括号)  

[;upper;]:大写字符,即A-Z  

[;xdigit;]:16进制的数字类型,0-9 A-F a-f的数字与字符

 

正则表达式:^  以....开头

 

^[[:space:]]*$ (有空格键的空行)

posted @ 2019-08-28 08:41  Eucalyptusleaves  阅读(131)  评论(0编辑  收藏  举报