2021-10-15 第六周
- 1. 编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)。
- 2. 生成10个随机数保存于数组中,并找出其最大值和最小值
- 3. 输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
- 4. 总结查看系统负载的几种命令,总结top命令的指标大概什么含义(不要求全部写出来)
- 5 .编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"
- 6. 每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间
1. 编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)。
- 使用expect实现自动登录远程主机:
#! /usr/bin/expect
spawn ssh root@10.48.4.18
expect {
"yes/no" {send "yes\n";exp_continue}
"password" { send "123123\n" }
}
interact
使用shell实现自定登录远程主机
#! /bin/bash
expect<<EOF
set timeout 10
spawn ssh root@10.48.4.18
expect {
"yes/no" { send "yes\n";exp_continue}
"password" {send "123123\n"}
}
expect eof
EOF
2. 生成10个随机数保存于数组中,并找出其最大值和最小值
#!/bin/bash
declare -a arr
num=$[RANDOM%1000]
arr[0]=$num
arr[9]=$num
for i in `seq 1 8`
do
num=$[RANDOM%1000]
if [ $num -gt ${arr[0]} ];then
arr[$i]=${arr[0]}
arr[0]=$num
elif [ $num -lt ${arr[9]} ];then
arr[$i]=${arr[9]}
arr[9]=$num
else
arr[i]=$num
fi
done
echo "生成的10个随机数为:" ${arr[*]}
echo "最大值为:" ${arr[0]}
echo "最小值为:" ${arr[9]}
[root@route-c7 ~]# ./max_min.sh
生成的10个随机数为: 993 245 245 538 764 424 807 885 162 0
最大值为: 993
最小值为: 0
[root@route-c7 ~]#
3. 输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
#!/bin/bash
#冒泡排序
#生成数组
declare -a arr
for i in {0..19};do arr[i]=$[RANDOM%1000];done
echo "排序前"${arr[*]}
#升序
for (( i=${#arr[*]}-1;i>=1;i-- ))
do
for (( j=1;j<=i;j++ ))
do
if [ ${arr[j]} -lt ${arr[j-1]} ];then
arr[j-1]=$[ arr[j]-arr[j-1] ]
arr[j]=$[ arr[j]-arr[j-1] ]
arr[j-1]=$[ arr[j]+arr[j-1] ]
fi
done
done
echo "排序后,从小到大输出:" ${arr[*]}
[root@route-c7 ~]# ./maopao.sh
排序前 812 617 717 610 414 350 439 436 763 383 341 747 986 812 237 568 915 896 113 487
排序后,从小到大输出: 113 237 341 350 383 414 436 439 487 568 610 617 717 747 763 812 812 896 915 986
[root@route-c7 ~]#
#降序
for (( i=${#arr[*]}-1;i>=1;i-- ))
do
for (( j=1;j<=i;j++ ))
do
if [ ${arr[j]} -gt ${arr[j-1]} ];then
arr[j-1]=$[ arr[j]-arr[j-1] ]
arr[j]=$[ arr[j]-arr[j-1] ]
arr[j-1]=$[ arr[j]+arr[j-1] ]
fi
done
done
echo "排序后,从大到小输出:" ${arr[*]}
[root@route-c7 ~]# ./maopao.sh
排序前 478 764 901 994 436 550 738 141 784 800 702 357 932 678 626 174 811 402 52 784
排序后,从大到小输出: 994 932 901 811 800 784 784 764 738 702 678 626 550 478 436 402 357 174 141 52
[root@route-c7 ~]#
4. 总结查看系统负载的几种命令,总结top命令的指标大概什么含义(不要求全部写出来)
[root@r8 ~]# uptime
19:46:13 up 7:09, 1 user, load average: 0.00, 0.00, 0.00
[root@r8 ~]# w
19:46:14 up 7:09, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 10.48.0.1 12:40 4.00s 0.06s 0.00s w
[root@r8 ~]# top
top(程序名称) - 19:48:27(当前时间) up 7:11(系统启动运行的时间), 1 user(当前的总用户数), load average(平均负载): 0.00(1分钟), 0.00(5分钟), 0.00(15分钟)
Tasks: 199 total(总任务数或总线程数), 2 running(运行中的任务或线程), 197 sleeping(休眠状态下的), 0 stopped(停止状态下的), 0 zombie(处于僵尸态的)
%Cpu(s): 0.0 us(un-niced用户进程的运行时间), 0.3 sy(内核进程运行时间), 0.0 ni(niced用户进程运行时间), 99.7 id(在内核空闲处理程序中花费的时间 ), 0.0 wa(等待IO完成所用的时间), 0.0 hi(服务硬件中断所花费的时间), 0.0 si(服务软件中断所花费的时间), 0.0 st(管理程序从此虚拟机中窃取的时间 )
MiB Mem : 1806.2 total(总物理内存), 1046.6 free(空闲的物理内存), 342.2 used(被使用的物理内存), 417.4 buff/cache(用作缓存的物理内存)
MiB Swap: 412.0 total, 412.0 free, 0.0 used. 1302.6 avail Mem
PID(进程ID) USER(用户名) PR(任务的调度优先级) NI(nice值) VIRT(虚拟内存大小) RES(常驻内存大小) SHR(共享内存大小) S(进程状态) %CPU(CPU的使用率) %MEM(内存使用率) TIME+(占用的CPU的时间) COMMAND(被执行的命令)
3023 root 20 0 64024 4680 3784 R 0.7 0.3 0:00.05 top
1 root 20 0 176484 10908 8272 S 0.0 0.6 0:01.94 systemd
5 .编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"
- 使用for循环
#!/bin/bash
net=192.168.0
for i in {1..254}
do
{
( ping -c 1 -w 1 $net.$i &> /dev/null ) && echo -e "$net.$i \e[1;32msuccess!\e[0m" || echo -e "$net. $i \e[1;31mfail.\e[0m"
}&
done
wait
- 使用while循环
func(){
seq 1 254 | while read host
do
{
(ping -c1 -w1 $net.$host &> /dev/null) && echo -e "$net.$host \e[1;32msuccess!\e[0m" || echo -e "$net.$host \e[1;31mfail.\e[0m"
}&
done
}
func
6. 每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间
[root@route-c7 backup]# crontab -l
30 1 * * 1-5 /root/cron.sh
[root@route-c7 backup]# cat ~/cron.sh
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
tar -cJf /backup/etcbak-$(date -d "yesterday" "+%F-%H").tar.xz /etc/ &> /dev/null
[root@route-c7 backup]#
[root@route-c7 backup]# ll
total 7256
-rw-r--r--. 1 root root 7429076 Oct 19 07:38 etcbak-2021-10-18-07.tar.xz
[root@route-c7 backup]#