一通配符
* 零个,所有字符
? 有且仅有单个字符
[0-9] 匹配单个 0-9
[abc] 匹配abc任意个字符
[^abc] 除abc的字符
[[:lower:]] 匹配单个小写字母 upper 大写 digit 数字
二变量 $ 调用变量 引用变量
unset D 取消变量
本地变量 仅在当前终端有用
/etc/profile 定义全局环境变量 登陆时候默认读取该文件 对所有用户有效
用户环境变量 ~/.bash_profile 只对当前用户有效,如有用户定义了,以用户为主,他会覆盖了全局变量
PATH变量 命令存放路录 命令执行只会搜索执行当前目录 /bin/bash 命令解释器
三shell脚本 运维 管理 .sh结尾
#!/bin/bash 声明用bash shell 开头
四 重定向 管道
命令 重定向符号 文件
> 输出重定向 覆盖原文件
>> 追加
管道符 |
命令1 | 命令2 | ...
命令1结果作为命令2的输入
五文本处理工具
cat |grep 过滤 查看文件内容
ls -IR 文件 |more 分页显示
head -n 5 文件 显示文件的前5行 默认显示前10行
tail -n 5 文件 显示文件的后5行 默认后10行
grep 选项 关键字
grep 关键字 文件 过滤关键字 -w word 单词 -i 忽略大小写 -iw -A after后多少行 -B 前多少行 before
|grep /bin/bash$ 过滤 以$什么结尾的
|grep -v ^';' |grep -v ^# |grep -v '#' 过滤掉以; # 开头的行 ,包含#
-v 反向选择 ^#过滤以#开头 ^$空行
|awk '{print $5}’ 以列为过滤单位 第五列 -F: 紧跟分割符号:,分割、
|sed 's/%//' sed 查找替换 s搜索 % 替换为空
/var/log 日志 追加方式 定位文件
tail -f /var/log/* 实时查看文件后10行
tail -f /var/log/* |grep -iE -A3 -B3 '(warn|err)' 排错
需求:
1. 截取系统中可以登录的用户,将这些用户导出到/root/userlist.txt文件中
cat /etc/passwd |grep /bin/bash$ |awk -F: '{print $1}' >> /root/userlist.txt
2. 过滤/etc/samba/smb.conf中,所有非注释行,非空行,导出至/root/smb.conf文件中
cat /etc/samba/smb.conf |grep -v ^';' |grep -v '#' |grep -v ^$ > /root/smb.conf
cat /etc/samba/smb.conf |grep -vE '(^;|#|^$)' >> /root/smb.conf