1. 总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。
grep: 用于在文本中搜索指定模式的工具。它支持使用正则表达式进行高级搜索。
例子:grep '/sbin' test.txt
sed: 流编辑器,用于在文本流中进行文本替换、删除、插入等操作。它可以在不修改原始文件的情况下对文本进行修改。
例子:sed 's/\/sbin/print/' test.txt
awk: 用于对文本进行处理和报告的强大工具。它支持自定义的文本处理规则和操作。
例子:awk -F ":" '{print $1}' /etc/passwd
cut: 用于从文本中剪切出指定字段或列的工具。
例子:ip addr|grep 'link'|head -1|cut -d':' -f2
sort: 对文本进行排序的工具,可以按行、按字段等进行排序。
例子:echo "5 3 1 4 2" | tr ' ' '\n' | sort -n
uniq: 用于从排序后的文本中删除重复的行。
例子:echo "5 3 1 4 2 4 2" | tr ' ' '\n' | sort -n|uniq
tr: 用于转换或删除文本中的字符。
例子:echo "5 3 1 4 2 4 2" | tr ' ' '\n'
head 和 tail: 分别用于显示文本的开头几行和末尾几行。
例子:echo "5 3 1 4 2 4 2" | tr ' ' '\n'| head -1
cat: 将文件连接到标准输出或文件的工具,通常用于查看文件内容。
例子:cat test.txt wc: 统计文本文件的行数、字数和字符数。
例子:echo "5 3 1 4 2 4 2" | tr ' ' '\n'|wc -l
find: find 命令用于在文件系统中查找文件和目录。虽然它主要用于查找文件,但也可以结合其他命令和管道来搜索文件内容。
例子:find / -name xx.sh
which:查找文件,多用于查找命令来源
例子:which ls
whereis:查找工具速度最快的,只能查找二进制程序、文档和源码
例子:whereis touch
printf:一个用于格式化输出文本的命令。它可以按照指定的格式将文本输出到标准输出或指定的文件中
例子:printf "Name: %s\tAge: %d\n" "John" 25
2. 总结文本处理的grep命令相关的基本正则和扩展正则表达式。
基本正则表达式 :
.: 匹配任意单个字符,除了换行符。
[]: 匹配括号内的任意一个字符。
^: 匹配行首的位置。
$: 匹配行尾的位置。
*: 匹配其前面的字符出现 0 次或多次。
\: 转义字符,用于匹配特殊字符。
扩展正则表达式 :
+: 匹配其前面的字符出现 1 次或多次。
?: 匹配其前面的字符出现 0 次或 1 次。
|: 或操作,匹配两个或多个模式中的一个。
(): 分组,用于限制或扩展模式的范围。
{}: 限定符,用于指定重复次数。
[]: 字符类,用于匹配括号内的任意一个字符。
3. 总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。
变量命令规则:
命名要求
区分大小写不能使程序中的保留字和内置变量:如:if,for
只能使用数字、字母及下划线,且不能以数字开头,不支持短横线
变量名大写
局部变量小写
函数名小写
大驼峰StudentFirstName,由多个单词组成,且每个单词的首字母是大写,其它小写
小驼峰studentFirstName,由多个单词组成,第一个单词的首字母小写,后续每个单词的首字母是大写,其它小写
下划线:student_name
环境变量
可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程.
export name=VALUE
位置变量
位置变量:在bash shell中内置的变量,在脚本代码中调用通过命令行传递给脚本的参数
$1,$2, ….. 对应第1个、第2个等参数
$0命令本身,包括路径
$*传递给脚本的所有参数,全部参数合为一个字符串
$@传递给脚本的所有参数,每个参数为独立字符串
$#传递给脚本的参数的个数
只读变量
只读变量:只能声明定义,但后续不能修改和删除,即常量
声明只读变量:
readonly name
查看只读变量:
readonly -p
局部变量
定义在函数内部的变量
状态变量
进程执行后,将使用变量$?保存状态码的相关数字,不同的值反应成功或失败,$?取值范例0-255
$?的值为0 #代表成功
$?的值是1到255 #代表失败
在脚本中使用以下命令自定义退出状态码
exit [n]
4. 通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
for i in {1..30}
do
if (( i2+(30-i)4 == 80 )); then
echo "鸡的数量为: $i"
echo "兔子的数量为:" $((30-i))
fi
done
5. 结合编程的for循环,条件测试,条件组合,完成批量创建100个用户, 1)for遍历1..1002)先id判断是否存在3)用户存在则说明存在,用户不存在则添加用户并说明已添加。
1)for遍历1..100'
2)先id判断是否存在
3)用户存在则说明存在,用户不存在则添加用户并说明已添加。
#!/bin/bash
name=user
for i in {1..100};do id $name$i &> /dev/null
if [ $? -eq 0 ];then
echo "$name$i已存在"
else
useradd -d /home/$name$i -s /bin/bash $name$i && echo "$name$i已创建"
fi
done
6. 磁盘存储术语总结: head, track, sector, sylinder.
head-磁头 track-磁道 sector-扇区 sylinder-柱面
7. 总结MBR,GPT结构。
MBR: 使用32位表示扇区数,分区不超过2T
0磁道0扇区:512bytes
446bytes: boot loader 启动相关
64bytes:分区表,其中每16bytes标识一个分区
2bytes: 55AA,标识位
MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)
MBR分区:主和扩展分区对应的1 -- 4,/dev/sda3,逻辑分区从5开始,/dev/sda5
GPT: 支持128个分区,使用64位,支持8Z(512Byte/block )- 64Z (4096Byte/block)
使用128位UUID(Universally Unique Identifier)表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC柠验位
8. 总结学过的分区,文件系统管理,SWAP管理相关的命令及选项,示例fdisk, parted, mkfs, tune2fs, xfs_info, fsck, mount, umount, swapon, swapoff
fidk
fdisk -l [-u] [device ... ] 查看分区
fdisk [device ... ] 管理MBR分区
gdisk [device ... ] 类fdisk 的GPT分区工具
子命令:
p 分区列表
t 更改分区类型
n 创建新分区
d 删除分区
V 校验分区
u 转换单位
w 保存并退出
q 不保存并退出
查看内核是否已经识别新的分区
cat /proc/partitions
CentOS 7,8同步分区表:
partprobe
parted
格式:
parted [选项] ... [设备 [命令 [参数] ... ] ... ]
范例:
parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200(默认M)
parted /dev/sdb rm 1
parted -1 列出所有硬盘分区信息
mkfs
是分区创建文件格式 mkfs .ext4 /dev/sda mkfs .xfs /dev/sda
xfs_info 查看xfs文件信息