本文主要是介绍第八周作业——第三种,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第八周作业——第三种
1、用shell脚本实现自动登录机器
#!/bin/bash
# ******************************************************
# Author :suika_xiaoyuzhenren
# Last modified: 2020-01-06 14:07
# Email : 2429366765@qq.com
# blog : https://blog.csdn.net/suika_xiaoyuzhenren
# Filename : 8-1.sh
# Description :
# ******************************************************#自动登机(企业批量版)
#.....................*#把要进行批量登录的ip地址写进临时文件中,用文件来控制for i in `seq 1 $ips`;do #有多少个ip就循环多少次
ip=`cat /data/tmp/ip.txt | sed -n ''''$i'''p'` #定义变量,每次循环取第$i个ip
#这儿用expect来进行自动化交互操作
expect <<EOF
set timeout 10
spawn ssh root@$ip
expect {"yes/no" { send "yes\n";exp_continue }"password" { send "123.com\n";exp_continue }
}
expect "]#" { send "echo 'successful login!~~~~~'\n" }
exit
EOF
done
echo '已完成本次批量登机'
2、shell 判断一个值bone是否在数组arrayZ=( one two three four five five )中
#!/bin/bash
# ******************************************************
# Author :suika_xiaoyuzhenren
# Last modified: 2020-01-07 11:16
# Email : 2429366765@qq.com
# blog : https://blog.csdn.net/suika_xiaoyuzhenren
# Filename : 8-2.sh
# Description :
# ******************************************************shuzhi=one #固定数值
#read -p '移动数值测试,如果要看正确结果,您只能输入one/two/three/four/five;否则,就是假的结果' shuzhi
Error=0
declare -a arrayZ #定义普通数组
arrayZ=("one" "two" "three" "four" "five" "five") #给数组赋值for i in `seq 0 "$((${#arrayZ[@]}-1))"`;do
#以数组下标进行循环,并赋值给i,固定值在每次循环都和当前循环数组的元素进行比较。if [ "${arrayZ[$i]}" = "$shuzhi" ];thenecho "$shuzhi in the ${arrayZ[$i]}"else
#不符合Error变量每次自加1Error=$(($Error+1))fi
done
#如果Error大于等于当前数组的个数,则输出$shuzhi not in the arrayZ array
if [ "$Error" -ge "${#arrayZ[@]}" ];thenecho "$shuzhi not in the arrayZ array"
fi
3、用命令或者脚本实现 0057AF051EFF 变为 00:57:AF:05:1E:FF 。
笨方法
echo 0057AF051EFF |sed -nr 's/(..)(..)(..)(..)(..)(..)/\1:\2:\3:\4:\5:\6/gp'var="0057AF051EFF";echo "${var:0:2}:${var:2:2}:${var:4:2}:${var:6:2}:${var:8:2}:${var:10:2}"
省事儿的方法
#!/bin/bash
# ******************************************************
# Author :suika_xiaoyuzhenren
# Last modified: 2020-01-07 15:59
# Email : 2429366765@qq.com
# blog : https://blog.csdn.net/suika_xiaoyuzhenren
# Filename : 8-3.sh
# Description :
# ******************************************************value1="0057AF051EFF"
length="${#value1}"
for ((i=0;i<"$length";i+=2));doif [ $i -eq 0 ]thenvar1="${value1:$i:2}"elsevar2="$var2:${value1:$i:2}"fi
done
echo "脚本最终执行结果为:$var1$var2"
4、a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0 \! \@ \# \$ \% \^ \& \* \( \) \- \_ \= \+ \\ \/ \' \" \; \: \[ \] \{ \} \, \. \?
用以上字符,结合数组,实现一个随机生成20位密码的脚本
# Author :suika_xiaoyuzhenren
# Last modified: 2020-02-03 20:49
# Email : 2429366765@qq.com
# blog : https://blog.csdn.net/suika_xiaoyuzhenren
# Filename : 8-4.sh
#用以上字符,结合数组,实现一个随机生成20位密码的脚本
# ******************************************************declare -a Passwd_varPasswd_var=(a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0 \! \@ \# \$ \% \^ \& \* \( \) \- \_ \= \+ \\ \/ \' \" \; \: \[ \] \{ \} \, \. \?)
Passwd_length=20for ((i=0;i<"$Passwd_length";i+=1));doPassword="$Password${Passwd_var[$RANDOM%${#Passwd_var[@]}]}"
doneecho -e "您的新密码如下,请查收:\n$Password"
#echo $Passwd_var|tr -s ' ' '\n'
5、详细叙述centos7开机流程
- 主机电源通电(开机),初始化硬件,进行POST加电自检
- BIOS根据顺序选择启动设备
- 启动第一个硬盘设备的引导分区
- 执行存放在引导分区内的bootloader(grub2 1阶段)
- 加载/boot分区的临时文件系统,加载成功后再加载/boot分区中grub2阶段的驱动程序(grub2 1.5阶段)
- 读取grub2的配置文件/etc/grub.d/、/etc/defalut/grub、/boot/grub2/grub.cnf,加载内核至内存中,解压缩/boot目录下的ramfs(因为grub2目录下的grub.cnf文件里面指定了内核的版本和根文件系统的地址)(grub2 2阶段)
- 开始初始化内核
- 检测可识别的所有硬件设备
- 加载硬件设备的驱动程序、内核对象
- 开始以只读方式挂载真正的根文件系统
- 加载systemd,代替/sbin/init(/sbin/init是个软连接,链接向了systemd, 实际上是加载/usr/lib/systemd/systemd)
- systemd开始执行/etc/systemd/system/default.target,读取系统默认启动级别
- systemd开始依次加载/usr/lib/system/system目录下的initrd.target相关单元(具体如下)
- emergency.service(这是centos7系统的紧急救援模式)
- emergency.target
- sysinit.target
- basic.targer
- systemd开始加载/etc/fstab文件
- systemd继续加载剩下的/usr/lib/system/system目录下*.target单元
- rescue.service(这是centos7系统的救援模式)
- rescue.target
- systemd加载multi-user.target文件(3模式),并行启动该模式下的服务和/etc/rc.d/rc.local(rc.local在centos7中不建议使用,只是过度旧版本才存在的)
(感觉在centos7中,要想加载桌面,得先加载命令行模式下的服务,这和centos6又不相同)
- systemd执行multi-user.target下的getty.target及登录服务
- systemd最后在执行graphical.target(我认为:没有安装图形化桌面是不会启动的)
- 用户登录系统,开始以shell控制主机
6、编写Nginx的systemd配置文件, 实现nginx进程开机启动
nginx.service配置文件
[Unit]
Description=The Test Nginx web server
After=network.target
Conflicts=httpd.service[Service]
Type=forking
ExecStart=/bin/nginx
ExecStop=/bin/nginx -s stop[Install]
WantedBy=multi-user.target
执行结果:
这篇关于第八周作业——第三种的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!