在写文章之前,推荐一款linux下的工具,叫做cheat,能够帮助shell脚本的编写
第一题:
写作一个备份/etc目录的脚本,要求:将/etc目录下的所有文件cp到/var/backups目录下的以当天的日期命名的目录中例如(/var/backups/etc.20110101)。并且判断前一天的目录中的文件与当天的区别,如果无区别,则删除前一天的备份目录。
第二题:
每隔一小时判断系统中所有文件系统的容量,当剩余容量小于20%的时候发邮件(邮件目的地自定)给用户作为提醒。
明日出答案.
Shell特点:
小而精巧
做好一件事尽快生成原型
可移植
纯文本存储
用软件发挥特长
用shell脚本增加系统可利用性,提高工作效率
避免用户界面功能太强大,利于组合
做每一个对象的过滤器
应用场景:
已有程序的简单包装
系统管理的脚本,系统启动,备份,系统安装
学习Shell:
不重复自己
找到系统shell来读
实践中的成长
#!作为解释器来使用,把后面的东西发送给指定的解释器来指定
命令:控制对象
-是选项:控制行为
ctrl+左箭头
ctrl+右箭头
ctrl+U
ctrl+k
!
ctrl+r
基础命令:
data命令
cal
cat :对某文件内容进行删除的时候使用
cat -n:打印行数
tail -n:打印一个文件的后指定行
head -n:前指定行
more:读取长文件时使用,不能往回走
more 文件名 |more
less:文件可以上下左右走
cut:把某一行
grep:
grep “你的字符串” 文件 -i 忽略大小写
wc:行,单词,字母,文件名
-l,-c,-w
sort:排序,相同的
-t:(以冒号做分割符)
-k2(以第二个字段做排序字段)
uniq:去重复
-c 统计重复的行数右多少
diff:用于比较两个文件是否相同,显示之间的差别
pattch:把差别应用到新的文件上,打补丁
2> :表示标准错误输出
1> :表示标准正确输出
第二周笔记:
调试脚本技巧
bash -x script.sh
工具哲学:
标准输入输出:
STDIN 0 >
STDOUT 1 2>
STDERR 2 2>&1
重定向到文件:
> 重定向标准输出到文件中
2> 重定向错误输出到文件中
&> 所有输出重定向到文件中
2>&1 将错误输出定向到标准输出中
exec 在脚本内部 打开或者替换文件描述符
注:默认覆盖 >>追加
>file 直接清空一个文件
2>/deb/null 丢弃
cat /dev/urandom >file 将file用随机数据覆盖
ps aux: 打印所有指令进程
/dev/pts/9 :虚拟终端
管道 |
未命名管道 |
命令管道 mkfifo 1
三向管道:tee
从文件重定向到输入:
tr ‘A-Z’ ‘a-z’ <.bashrc 相当于cat .bashrc | tr 'A-Z' 'a-z'
<<叫做:here document
passwd<<EOF #在脚本里面有些命令需要从键盘写进来
aaa
bbb
ccc
EOF
<<<是<<的一个特殊情况
命令的分组:
;值前面命令运行完了,继续运行下个命令
crontab:周期性计划命令
field allowed values
------ -----------------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12
day of week 0-7
基础命令:
tac 和rev:是正反反面的命令,一个是行,一个是列
join和paste
paste:两个相同行的文件合并起来
join:
作用,文件的分隔处理
seq:产生序列
yes:有些命令不断提示yes/no,这个
no true echo$? 在判断中使用
touch:修改文件修改时间,文件不存在会产生新文件
在脚本中,通过比较文件修改日期来比较文件是否更新
watch:每隔几秒干件事
watch ls -l
watch -n 按秒来更新
df:挂在文件系统
du:列出来目录文件占多少空间
mail 邮件系统
两个题:明天再写