shell脚本基础
1.操作系统基础
(man:参数选项 命令/文件
source:
alias:
bg:进程
bind:
break:
builtin:内建
exec:执行
history:)
(只有/不能用来做文件名)
2.bash的基本特性
a、history命令历史
查看之前的命令的历史记录
关于命令历史的文件:
每个用户家目录下面的.bash_history
在关机的时候,会自动写入一次(history -a 将内存中的命令历史写入文件)
扩展知识:
关于命令历史的变量:【环境变量:bash程序下默认能够生效的变量,不需要定义;环境变量必须大写】
查看:env(environment) //查看环境变量
set //查看更详细的环境变量参数
env 只能查看系统支持的部分环境变量
set查看所有环境变量,同时set可以设置变量
但是,如果要是用export将set设置变量导入到环境变量中
-----以上都是临时的!
/etc/profile /etc/rcbash
~/.profile ~/.rcbash(家目录)
source让其生效(所有命令source后才生效)
exec【剥离子进程,单独创建父进程】指定父进程
变量:一段被命名的内存空间;
crontab:做定时任务
history所定义的环境变量
HISTCONTROL=ignoredups
ignoredups //忽略重复的历史命令 -- 连续且相同,才叫重复
ignorespace //忽略空白开头的历史命令,“键入空格开头则不会被记录”
ignoreboth //俩者都生效
HISTFILE=/root/.bash_history (.bash_history存储历史记录,存在硬盘)
HISTFILESIZE=500
HISTSIZE=500 //数量
history命令:
-d:删除指定行
-c:清除所有记录
-a:将当前的记录信息,添加到/root/.bash_history中去;
history命令的调用方式:
!#:指定调用哪一行命令(#表示数量,执行#行的命令)
!string:匹配最近一次的字符串
!!:执行上一条命令
*!$*:上一条命令的最后一个参数
ls /etc
ls !$
ESC+.(快捷键esc+.):获取上一条命令最后的部分(空格分隔)
history# :显示最近#行的命令
b、命令补全、目录补全
tab键实现命令和目录的补全;
【多敲】
扩展知识:
PATH路径:命令被查找的一个默认路径;
PATH=$PATH:/usr/bin
如果执行文件不在PATH路径下,只能使用全路径进行执行;
【$:调用
&&:与;||:或
-x:判断文件是否有执行权限
-r:判断文件是否有读权限
-w:判断文件是否有写权限】
c、命令展开—date命令
Linux的目录需要遵循什么规则? — FHS目录规则
cp /usr/local/nginx/nginx.conf /usr/local/nginx/nginx.conf.bak
cp /usr/local/nginx/{nginx.conf,nginx.conf.bak}
id 名字
1 a
2 b
1_a 1_b 2_a 2_b
touch{1,2}_{a,b}
date ---显示当前系统时钟 (硬件时钟)(系统是软件)ntp服务器:做时钟同步
clock或hwclock ---硬件时钟
用hwclock可以做硬件时钟和系统时钟的同步
cal:看日历
用法:
date[option]...[+format]
date [MMDDhhmm[CC|YY]
月 日 时 分 世纪 年 秒
格式:
%F ---2019-9-16 CCYY-mm-dd
%D ---09/16/19 mm/dd/YY
%T ---15:51:26 hh:MM:ss
%H---小时 hh
%S---秒 ss
%s---19700101源年时间(Linux出现时间)
%M---分 MM
%m---月份 mm
%c ---Mon 16 Sep 2019 03:50:28 PM CST
%C ---20
%Y ---CCYY
(``:获取结果)
压缩和归档
压缩:gzip ungzip zcat(查看压缩文件且不解压)
bzip2
xz
【注意:压缩操作只能对文件进行,不能对目录进行操作】
归档:tar---(本身只做归档,但也可做压缩)--可以对目录进行操作
-j ---bzip2
-J ---xz
-z ---gzip
-x ---解压extract(可以不指定解压的工具)
-c ---create
-v ---详细信息verbose
-f ---指定创建的压缩文件的文件名
-t ---不解压查看内容,和zcat一样
tar cjvf etc.bak.`date +%F`.bzip2 /etc/
tar xf ----解压文件(解压时不要指定解压方式,会自动识别)
练习:每天周期性备份/etc/文件,并取好名字;
crontab做定时任务:
crontab -e:
***** /bin/tar cjf /root/etc.bak`/bin/date +%F`.bzip2 /etc/ &> /dev/null
分时日月星期(*代表)
d、命令的执行状态
命令执行后,有俩类返回值:1.命令的默认返回值;
2.命令的执行状态。
状态有俩类:1、0 ----代表命令执行成功;
2、1-255 ----均代表执行失败。
?
:
一
个
特
殊
环
境
变
量
。
用
来
存
储
上
一
条
命
令
的
执
行
状
态
;
[
? :一个特殊环境变量。用来存储上一条命令的执行状态; [
?:一个特殊环境变量。用来存储上一条命令的执行状态;[? -eq 0] && exit 0 || exit 1
e、命令的快捷键
Ctrl + a:光标跳到命令行行首
Ctrl + e:跳到命令行行尾
Ctrl + u:删除光标前的字符
Ctrl + k:删除光标后的字符
Ctrl + w:删除光标前的一个单词
Ctrl + shift + t:新建图形终端
Ctrl + l clear:清屏
Ctrl + s:锁定终端,使之无法输入内容
Ctrl + q:解锁
Ctrl + d:关闭当前bash程序
Ctrl + r:和!string效果一样,调用最近一次匹配string的命令
Ctrl + f :光标向右移动一个字符(相当于方向键右键)
Ctrl + b:光标向左移动一个字符
Ctrl + insert:复制命令行内容
shift + insert:粘贴命令行内容
Ctrl + c:中断终端正在执行的任务或者删除整行
f、alias别名
取外号—为了方便命令的调用,取一些容易记忆的名字;
alias cls=‘clear’ //注意:等号前后没有空格;
/etc/profile(全局生效) //指定环境变量
/etc/rcbash(全局生效) //用来存储普通变量
~/.profile(当前目录下生效)
~/.rcbash(当前目录下生效)
g、文件通配符 – globbing
文件通配符
-
匹配任意长度的任意字符(不能匹配空白符)
? 匹配任意单个字符
[] [0-9] [a-z] [A-Z] [a-zA-Z] [0-9a-zA-Z]
[^] [^0-9]
符号集合 [:digit:],[:graph:],[:lower:],[:print:],[:punct:], [:space:],[:upper:],[:xdigit:]
[0-9] [a-z] [^0-9a-zA-Z] [空格符] [A-Z] [A-Fa-f0-9](十六进制)
[:alpha:] [:alnum:]
[a-zA-Z] [0-9a-zA-Z]
注意:在使用时候需要再加中括号[[:digit:]] = [0-9]
练习:
1.显示/var目录下所有以1开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录;
ls /var/1*[0-9][[:lower:]]
2.显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录;
ls /etc/[0-9][^0-9]
3.显示/etc目录下,以非字母开头,后面跟了一个字母及其他任意长度任意字符的文件或目录;
4.复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/test目录中;
5.复制/etc目录下,所有以.d结尾的文件或目录至/tmp/test.com目录中;
6.复制/etc目录下,所有以.conf结尾,且以m n r p开头的文件或目录至/tmp/test.com目录中;
注意:文件通配符globbing都是用来匹配文件名的;