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 i 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:]]*$ (有空格键的空行)