上周五测试的讲解:
将命令变成系统命令(可以直接敲),怎么做呢?
有个环境变量PATH,功能,执行任何命名都会在这个路径里面去搜索,它具有搜索功能!做法:把制作的脚本放在其中的某个目录里面,或者将制作脚本的目录加入PATH变量里面,注意权限为700
判断有没有jim这个用户:grep “^jim:”/etc/passwd注意^jim:这样更好
扩展:组管理员的成员+普通组的成员一起输出
5类ip地址:
A:1-127
B:128-191
C:192-223
D:224-239多点播送
E:240-254做实验
for i in`grep /bin/bash$ /etc/passwd | grep -v root | cut -d: -f1`;do userdel -r$i;done
pxe能同意装好几台,装好之后就能发送
双色球红球避免重复的好方法:
使用sort和uniq,这种方法是刘福元想出来的,太厉害了
思路是关键字,重复,就想到了uniq,哈哈,太巧了
> tmp.txt
while [`sort tmp.txt | uniq | wc -l` !=6 ];do
echo “$[RANDOM%33+1]” >> tmp.txt
done
echo “red:`sorttmp.txt | uniq`”
还有一种是老师的点名,点到一个删除一个数组数据,这种也不错:
[ -z “${name_list[*]}”] && name_list={`sed ‘1d’ /var/ftp/pub/scripts/name.txt` &&num=${#name[*]}}
ran=$[RANDOM%num]
while [ -z “${name_list[ran]}”];do
ran=$RANDOM%num
done
echo${name_list[ran]}
unset name_list[ran]
凡哥练习题:
0.描述vim三种工作模式的作用。如何切换模式?
命令模式(esc)、插入模式(a/i/o)、尾行模式(:)
1.显示/etc/passwd文件的前5行内容,并显示行号
grep -n"" /etc/passwd | head -5
2.将第1题的结果重定向覆盖写入到/tmp/pwd.txt文件中。
grep -n"" /etc/passwd | head -5 > /tmp/pwd.txt
3.用vim打开第2题的文件,复制第1到第3行内容,粘贴到文件最后一行下面。
vim/tmp/pwd.txt
G :1,3 co .
4.将文件中所有的sbin替换成SBIN。删除文件中所有的SBIN。
:%s#sbin#SBIN#g
:%s#SBIN##g
5.将文件中第2行所有的:冒号替换成;分号。在文件中查找;号。
:2 s#:#;#g
esc
/;
6.删除文件中的第1~3行内容。撤消操作。反撤消操作。
:1,3d
7.将文件另存为/tmp/pk.txt。
:w /tmp/pk.txt
8.显示行号。不显示行号。保存文件并退出vim程序。
:set nu
:set nonu
:wq或 x
9.显示系统中的命令别名。
alias
10.切换到/etc/sysconfig/network-scripts目录,显示当前工作路径,显示文件列表及详细信息。
cd /etc/sysconfig/network-scripts
pwd
ls -l或ll
11.切换到上一级目录,切换到上一次访问的目录,切换到当前用户的家目录。查看电脑ip,查看cpu型号。查看内存容量。
cd ..
cd -
cd
ifconfig
lscpu或cat /proc/cpuinfo
free -h或cat /proc/meminfo
[1-9][0-9]匹配10-99中的任意一个字符
[1-5][0-5]匹配10-15,20-25,30-35,40-45,50-55
2.5888
205888
215888
2a5888
265888
grep “2.5”会显示全部的内容,这个.默认代表任意字符,相当于an5
grep “2\.5”只会显示出2.5,转义一下就只代表.了
grep “2..5”相当于2nn5
注意力集中:
like
love
想要替换like和love为liker和lover怎么办:
有规律:以l开头,以e结尾
:%s#\(l..e\)#\1r#g \1是第一组的意思,相当于$1哈哈哈,\1r就是lover和liker了
192.168.1.20替换为30
%s#\(192.168.1.\)20#\130#g 这个\130相当于$1后面加上30 ,带上20是直接把这些东西都替换成$1加上30,就相当于:%s#192.168.1.20#192.168.1.30#g
192.168.1.30
192.168.1.130
192.168.1.31
192.168.1.33
192.168.1.120
192.168.1.111
192.168.1.150
全换为2网段:
:%s#\(192.168.\)1\(.*\)#\12\2#g相当于$1加上2加上$2
注意.*要扩到一起,光是扩*识别不到:
:%s#192.168.1\(.*\)#192.168.2\1#
www.uplooking.com.cnwww.uplook.cn
:%s#\(www.\)\(uplook\)ing.com\(.cn\)#\1\2\3#
例子:
1.使用模式匹配(模式就是grep “模式”)555222
555222
5555222
5555555555222
5552224444
4444555222
grep"^555222$" pipei.txt
订正:grep “^\(555222\)$”pipei.txt
grep "\<555222\>"pipei.txt 噢,忘了还有无弊端的精确匹配\<和\b
或grep “\<5\{3\}2\{3\}\>”pipei.txt用匹配出现几次的方法也行
2.匹配单词ac中间任意
grep"a.*c" g.txt
订正:贪婪匹配,需要戒掉贪婪
grep "\<a.*c\>"g.txt
3.删除每行的第二个字符
只会用ctrl+v!但是遇到了不等宽的字段没辙了
订正:
vim/etc/passwd进去
:%s#正数第二个##
:%s#\(.\)\(.\)#\1#
删除每行的倒数第二个字符
:%s#\(.\)\(.$\)#\2#注意是保留最后一个,删除倒数第二个,凡哥好聪明呀
4.匹配1~254
grep"[0-2][0-5][0-4]" pipei.txt有问题!
打印1-300然后丢到文件里去:
seq 300 | tr"\n" " " > num.txt
echo>> num.txt追加回车
从个位、十位、百位来思考哦
1~9:[1-9]
10~99:[1-9][0-9]
100~199:1[0-9][0-9]居然还可以把1写到括号的外面
200~249:2[0-4][0-9]
250~254:25[0-4]
记住最前面的不能是0!1~9要单独写
练习:0~96
catnum.txt | grep "\<[1-8][0-9]\>\|\<9[0-6]\>"注意用|隔开,|需要使用转义符\,然后再需要用无弊端精确匹配<>,也需要使用转义符号\,方括号不需要用转义字符\,小括号需要转义,大括号需要转义(大括号在脚本里面不需要转义),尖括号需要转义,在脚本里面可以写+号
最后写为:cat num.txt | grep"\<[0-9]\>\|\<[1-8][0-9]\>\|\<9[0-6]\>"
这个是错的:000~254:[0-2][0-5][0-4]注意没有到9就匹配不到所有的哈,一看就知道错了,因为最前面的不能是0啊,除非是[1-2][0-5][0-4]
[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4]用一个|符号分隔开(注意要转义字符\),然后需要用无弊端精确匹配:
\<[1-9]\>\|\<[1-9][0-9]\>\|\<1[0-9][0-9]\>\|\<2[0-4][0-9]\>\|\<25[0-4]\>
最后结果为:
catnum.txt | grep"\<[1-9]\>\|\<[1-9][0-9]\>\|\<1[0-9][0-9]\>\|\<2[0-4][0-9]\>\|\<25[0-4]\>"
\<[1-9]\>\|\<[1-9][0-9]\>\|\<1[0-9][0-9]\>\|\<2[0-4][0-9]\>\|\<25[0-4]\>
[1-9]|[1-9][0-9]
[1-9]{0,1}[0-9]会出现0
\<[1-9]\{0,1\}[0-9]\>\|\<1[0-9][0-9]\>\|\<2[0-4][0-9]\>\|\<25[0-4]\>
合并:
# grep"\<[1-9]\{0,1\}[0-9]\>\|\<1[0-9][0-9]\>\|\<2[0-4][0-9]\>\|\<25[0-4]\>" num1.txt
所以得出结论:最好不要合并,合并之后会出现0,就用普通的就行了,通俗易懂
扩展正则表达式:
catnum.txt | grep"\<[1-9]\>\|\<[1-9][0-9]\>\|\<1[0-9][0-9]\>\|\<2[0-4][0-9]\>\|\<25[0-4]\>"改为:
# grep -E"\<[1-9]{0,1}[0-9]\>|\<1[0-9]{2}\>|\<2[0-4][0-9]\>|\<25[0-4]\>" num1.txt将合并的分开:
# grep -E"\<[1-9]|[1-9][0-9]\>|\<1[0-9][0-9]\>|\<2[0-4][0-9]\>|\<25[0-4]\>" num1.txt整理:
# grep -E"\<[1-9]\|[1-9][0-9]\>\|\<1[0-9][0-9] \>\|\<2[0-4][0-9]\>\|\<25[0-4]\>" num1.txt
正则表达式的扩展
?
+
grep -E
看笔记
为什么要加-E呀?
加了-E能够使用?和+呀
? 表示0个或1个它前面的字符 和{0,1}一样
+ 表示1个或多个它前面的字符 和{1,}一样
注意+和?是接在[]后面的,在脚本里面可以写+号
注意大括号{}是接在[]后面的
5.匹配邮箱地址
别忘了无弊端精确匹配
vim mail.txt
12311225@qq.com
12dsaf@163.com
12,..@163.com
sdfAA@qq.com
dsfajg@.qq.com.cn
dsaf@.qq.com
ddoasgijsadiogj.com
答案:
grep -E"\<[0-9a-zA-Z]+@[0-9a-zA-Z]+\.com\>" mail.txt
6.把每个数字用()括起来(数字数字,不要忘记了方括号)
vim num.txt
要把这个变成组,组要括起来,然后才能用\1表示$1,小括号需要转义,方括号不需要转义,大括号需要转义(大括号在脚本里面不需要转义),尖括号需要转义,如果出现大规模的改变,就是没有写尖括号,在脚本里面可以写+号
哈哈,在vim里面不能用grep -E,就只好用大括号了
7.判断用户输入的是否是数字
1~199
/1[0-9][0-9]
vim 没有做特殊设置的时候只能使用基本正则表达式
订正:
[0-9]{1,}或[0-9]+代表1次或多次
vimpanduan.sh
read -p"input(1~199):" num
if [[ $num=~ [0-9]+ ]];then(只要有数字就是数字)注意=~要使用两个方括号[[]],取反的话在[[ !这里写感叹号
echo "this is a number!"
else
echo "input error!"
fi
精确
一个或多个
加双引号是错的
正确的:发现在脚本里面写的正则表达式不能用无弊端精确匹配,但是能用^[0-9]+$,而且不能用大括号{}
不能是负数和小数
写上引号会报错
写上词会报错(在脚本里不能用无弊端精确匹配,但能用^$)
支持花括号,但不要带上\,大括号在脚本里面不需要转义
判断输入的最好使用^$,判断是否是数字(非负数的整数):if [[ $num =~^[0-9]+$ ]]或if [[ $num=~ ^[[:digit:]]+$ ]](同样负数和小数不行)
吴老师面试题:
i节点inode节点包含了描述文件的全部信息
nfs网络文件系统,适用于linux和linux之间的文件共享
linux文件系统中每个文件用inode节点来标识
全部磁盘块由四个部分组成,分别为引导块、专用块、inode节点表块,数据存储块。
超级块包括了inode节点块、空闲块
网络管理的重要任务是:控制和监控
静态路由ip设定后,若网络拓扑结构发生变化,需系统管理员修改路由ip地址
安装linux,在系统分区的时候必须要有两种分区类型:文件系统分区和交换分区
2017/12/19
14.sed?
15.awk?
作业:
bilibili的马哥教育
凡哥笔记1就剩作业了(留着和吴老师发的面试题一起看)
交换机和路由器的关系:
网线的颜色顺序:
静态路由和动态路由:静态路由自己分配ip地址,动态路由DHCP自动分配ip地址
备份:系统备份(操作系统)、用户备份(文件)
每个用户的每个标识是什么?uid
编程语言、上线、领导
系统管理员:资源管理、性能管理、用户管理、进程管理、资源管理
大后期需要整合出一个万能答案
周四考试
作业
10.1作业:将公钥发送到能和本机通信的pc。不能通信发送失败将信息记录
#!/bin/bash
# 将公钥发送到192.168.1.1~192.168.1.10密码是1
[ ! -f/tmp/ip.txt ] && > /tmp/ip.txt
for((i=1;i<=10;i++));do
if [ $(ping -w 2 192.168.1.$i | grep "loss" | cut -d" "-f6) == "0%" ];then
/usr/bin/expect<< ok
spawnssh-copy-id 192.168.1.$i
expect"yes/no"
send"yes\n"
expect"password"
send"1\n"
expect eof
ok
else
echo "192.168.1.$i notalive" >> /tmp/ip.txt
fi
1.写点名脚本
略略略
2.匹配用户名是三个字符的用户
解:
cat/etc/passwd| cut -d: -f1 | grep -v "-" | grep"\<...\>"
3.删除每行的倒数第二个字符
解:
:%s#\(.\)\(.$\)#\2#
4.显示/boot/grub2/grub.cfg文件中至少一个空白字符开头的行
解:
cat/boot/grub2/grub.cfg | tr -s "\n" | grep "^ "
5.删除每行的倒数第一个字符
:%s#\(.\)\(.$\)#\1#
6.将square和fair调换位置
square andfair ---->fair and square
解:
:%s#squareand fair ---->fair and square#fairand square ---->square and fair#g
7.删除每行的第一个单词(纯字母)
解:
:%s#^[a-zA-Z]\{1,\}##g
8.删除某文件中以#号开头及后面至少有一个空白字符的行
解:
grep -v"^# " pass.txt
9.删除某文件中开头的不是注释行的#号
解:
:%s@\(^.\{1,\}\)\(#\{1,\}\)@\1@
10.显示/etc/vsftpd/vsftpd.conf文件中不是#号开头的行
解:
grep -v"^#" /etc/vsftpd/vsftpd.conf
11.将倒数第一个字符和倒数第二个字符交换位置
解:
:%s#\(.\)\(.$\)#\2\1#
12.判断用户输入的内容是大写字母,还是小写字母,还是数字,还是特殊符号,如何是混合的输出你输入了有什么,例:输入A1,你输入了大写字母,数字
解:
read -p"input:" input
if [[ $input=~ [0-9]+ ]];then
echo "你输入了数字"
fi
if [[ $input=~ [A-Z]+ ]];then
echo "你输入了大写字母"
fi
if [[ $input=~ [a-z]+ ]];then
echo "你输入了小写字母"
fi
if [[ !$input =~ [0-9A-Za-z]+ ]];then
echo "你输入了特殊符号"
fi
1.使用case实现成绩的优良差的判断
90-100 非常优秀
80-89 优秀
70-79 良好
61-69 还需努力成绩不理想
60 刚刚及格
0-59 差
如果输入的不是数字 提示输入的内容不正确,请重新输入
输入exit退出,其他不退出
解:
vim case.sh
for((;;));do
read -p "input score:" score
if [[ ! $score =~ ^[0-9]+$ ]];then
echo "输入的内容不正确,请重新输入"
else
break
fi
done
case $scorein
9[0-9]|100)
echo "非常优秀";;
8[0-9])
echo "优秀";;
7[0-9])
echo "良好";;
6[1-9])
echo "还需努力成绩不理想";;
60)
echo "刚刚及格";;
[0-9]|[1-5][0-9])
echo "差";;
exit)
exit;;
*)
echo "输入的范围不正确,请输入0~100"
esac
2.vim删除每行的第一个字符
解:
:%s#^.##g
3.vim在每行行首添加hello字段
解:
:%s#^#hello#g
4.vim将ro或re替换成A
解:
:%s#ro\|re#A#g
5.编写初始化脚本
配置yum源
安装虚拟机软件
安装cherrytree
安装ntfs-3g
安装stardict
按q键退出程序
脚本必须有选择菜单
解:
vim/scripts/yumAuto.sh
echo -e "[localyum]\nname=centos7u3\nbaseurl=file:///mnt/centos7u3\ngpgcheck=0\nenabled=1">> /etc/yum.repos.d/localyum.repo
mkdir/scripts
umount/dev/sr0
mount/dev/sr0 /mnt/centos7u3我忘记挂载在哪儿了啊
yum cleanall
yumrepolist