脚本1
难点1:统计变量的长度
wc -L和${#变量}
[root@fttsaxf script]# echo 123love|wc -L
7
[root@fttsaxf script]# name=iloveyou
[root@fttsaxf script]# echo ${#name}
8
难点2:使用正则去匹配
# "[^0-Z]"表示不在0-9和所有大小写字母中的符号,就是特殊符号。[],里边有^,就是表示取反的意思
[root@fttsaxf script]# echo "dsFdjgls123#"|egrep "[0-9]"|egrep "[a-Z]"|egrep "[^0-Z]"
dsFdjgls123#
[root@fttsaxf script]# echo "#"|egrep "[0-9]"|egrep "[a-Z]"|egrep "[^0-Z]"
[root@fttsaxf script]# echo $?
1
# 这段字符串必须满足所有的条件才能够算执行成功
# 第一段代码可以这样写
[root@fttsaxf script]# echo "dsFdjgls123#"|egrep "[0-Z]"|egrep "[^0-Z]"
'''
[0-9],表示0-9的集合里任意取一个
[a-z],表示小写字母
[A-Z],表示大写字母
[a-z],表示所有的大小写字母
[0-Z],表示数字和所有的大小写字母;相当于"\w"
"\W",表示所有的特殊字符;相当于[^0-Z]。[^0-Z],表示不是数字和所有大小写字母的内容
但"[^0-Z]"比"\W"多了"_"
'''
[root@fttsaxf script]# echo "_fdsjk#"|egrep "\W"
_fdsjk#
[root@fttsaxf script]# echo "_fdsjk#"|egrep "[^0-Z]"
_fdsjk#
# 第三和五问代码
#!/bin/bash
# read -s ,可以隐藏输入的内容
read -s -p "请输入密码:" user_pwd
if (( ${#user_pwd} >= 8))
then
echo "你的密码长度合格,你的密码是$user_pwd 密码长度为${#user_pwd}"
#echo "$user_pwd" | passwd + 用户 --stdin
if echo "$user_pwd" |egrep "[a-z]"|egrep "[A-Z]"|egrep "[0-9]"|egrep "[^0-Z]"
then
echo "密码满足复杂性要求,包含大小写、数字、特殊符号 。密码为:$user_pwd"
else
echo "密码不满足复杂性要求,包含大小写、数字、特殊符号 。密码为:$user_pwd"
fi
else
echo "你的密码长度不合格"
fi
# 运行结果
[root@fttsaxf script]# bash recv_passwd.sh
请输入密码:你的密码长度合格,你的密码是1313dsjigi 密码长度为10
密码不满足复杂性要求,包含大小写、数字、特殊符号 。密码为:1313dsjigi
[root@fttsaxf script]# bash recv_passwd.sh
请输入密码:你的密码长度合格,你的密码是Fsjkgig*giasojg**561 密码长度为20
Fsjkgig*giasojg**561
密码满足复杂性要求,包含大小写、数字、特殊符号 。密码为:Fsjkgig*giasojg**561
脚本2
难点1:怎么找到uid大于500的用户和加了一些自己的字符串
[root@fttsaxf script]# cat /etc/passwd |awk -F ":" '$3 > 500 {print $1,"uid is",$3,"home directory is",$6}'|tail -5 # 这里只取后五个为了看效果
songqingshu_son uid is 7794 home directory is /home/songqingshu_son
wangchen_son uid is 7795 home directory is /home/wangchen_son
cali uid is 7796 home directory is /home/cali
dengjz uid is 7797 home directory is /home/dengjz
xiaohui uid is 7798 home directory is /home/xiaohui
若是不是用awk命令进行所有操作怎么写呢?
#!/bin/bash
cat /etc/passwd|awk -F : '{print $1,$3,$6}' >user.txt
while read name uid home_dir #按这三个变量依次导入文件里的内容,也就是name对应着$3,以此类推
do
if (($uid > 500))
then
echo "$name uid is $uid home is directory is $home_dir"
fi
done <user.txt
总结:如何将一行里的不同的字段赋值给不同的变量
1、awk是使用$1,$1;2、while read name uid home_dir (这三个都是自己定义的变量)
脚本3
难点1:如何把文件传输出去?
1、scp,建立免密通道,可以百度或者看视频来获取;2、邮件
难点2:不管用户的服务器如何重启,你的这个程序都要能够运行。不能让用户删除你的这个脚本
1、计划任务;
2、profile文件,四个用户登录相关的配置文件。缺点:要用户登录或者执行bash的时候才能够运行。可以在这文件里边检查是否有计划任务,没有就添加计划任务
3、开机启动流程里执行脚本,检查是否有计划任务,没有就添加计划任务
比如:a->b->c-->d-->job,当我们用户发现了c,然后删除了c,当b检测到c被删除了,然后又重新建立一个c,然后又能够重新生成病毒脚本。
我们要是做的厉害的话,可以把最深处的a,做成进程。
牵扯到的技术点:
1、开机启动流程
2、计划任务
3、scp,免密通道
4、编写一个可以一直运行的进程
5、不同的程序之间环环相扣,互相检查,相互创建
警告:非法控制其他人的服务器,窃取资料属于违法行为,乱搞的话怕是会吃几年牢饭。