第六周

1、编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)。

使用expect:

[root@Centos8 ~]# cat ssh-expect.sh
#!/usr/bin/expect
set ip [lindex $argv 0]
set user [lindex $argv 1]
set password [lindex $argv 2]
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" {send "$password\n" }
}
interact

使用shell:

[root@Centos8 ~]# cat ssh-shell-expect.sh
#!/bin/bash
ip=$1
user=$2
password=$3
expect <<EOF
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
expect "]#" { send "exit\n" }
EOF

2、生成10个随机数保存于数组中,并找出其最大值和最小值

[root@Centos8 ~]# cat max.sh
#!/bin/bash
declare -i min max
declare -a nums
for ((i=0;i<10;i++));do
nums[$i]=$RANDOM
[ $i -eq 0 ] && min=${nums[0]} && max=${nums[0]} && continue
[ ${nums[$i]} -gt $max ] && max=${nums[$i]} && continue
[ ${nums[$i]} -lt $min ] && min=${nums[$i]}
done
echo "All numbers are ${nums[*]}"
echo "Max is $max"
echo "Min is $min"
[root@Centos8 ~]# sh max.sh
All numbers are 11823 11000 13569 25965 29631 4126 25298 21947 2751 10978
Max is 29631
Min is 2751


3、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序

[root@Centos8 ~]# cat bubble.sh
#!/bin/bash
num=10
for((i=1;i<=$num;i++));do
read -p "请输入任意数组,共$num个数,这是第$i个:" arr[$i]
done
len=${#arr[*]}
echo "原始数组是:" ${arr[*]}
for((j=0;j<$len;j++));do
for((i=0;i<$len-j;i++));do
if [ ${arr[$i]} -gt ${arr[$i+1]} ];then
x=${arr[$i]}
arr[$i]=${arr[$i+1]}
arr[$i+1]=$x
#echo ${arr[$i]} "<======>" ${arr[$i+1]}
fi
done
done
echo "整理后的数组是:" ${arr[*]}

执行结果:

[root@Centos8 ~]# bash bubble.sh
请输入任意数组,共10个数,这是第1个:12
请输入任意数组,共10个数,这是第2个:45
请输入任意数组,共10个数,这是第3个:78
请输入任意数组,共10个数,这是第4个:65
请输入任意数组,共10个数,这是第5个:32
请输入任意数组,共10个数,这是第6个:9
请输入任意数组,共10个数,这是第7个:98
请输入任意数组,共10个数,这是第8个:28
请输入任意数组,共10个数,这是第9个:73
请输入任意数组,共10个数,这是第10个:5
原始数组是: 12 45 78 65 32 9 98 28 73 5

整理后的数组是: 5 9 12 28 32 45 65 73 78 98


4、总结查看系统负载的几种命令,总结top命令的指标大概什么含义(不要求全部写出来)

[root@Centos8 ~]# uptime
19:36:11 up 8 days, 22:23, 1 user, load average: 0.00, 0.00, 0.00
[root@Centos8 ~]# w
19:36:16 up 8 days, 22:23, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 10.0.0.1 06:51 0.00s 0.11s 0.00s w

[root@Centos8 ~]# top
top - 19:36:53 up 8 days, 22:24, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 217 total, 2 running, 215 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st
MiB Mem : 1950.9 total, 569.0 free, 682.9 used, 699.0 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 1084.2 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
155232 root 20 0 65544 5156 4240 R 0.3 0.3 0:00.01 top
1 root 20 0 187388 15232 9760 S 0.0 0.8 0:10.69 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.23 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-events_highpri
9 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
10 root 20 0 0 0 0 S 0.0 0.0 0:01.45 ksoftirqd/0
11 root 20 0 0 0 0 I 0.0 0.0 0:06.72 rcu_sched
12 root rt 0 0 0 0 S 0.0 0.0 0:00.04 migration/0
13 root rt 0 0 0 0 S 0.0 0.0 0:00.38 watchdog/0
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1
16 root rt 0 0 0 0 S 0.0 0.0 0:00.70 watchdog/1
17 root rt 0 0 0 0 S 0.0 0.0 0:00.04 migration/1
18 root 20 0 0 0 0 S 0.0 0.0 0:01.63 ksoftirqd/1
20 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/1:0H-events_highpri
22 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs

top命令执行结果的前5行为系统整体的统计信息,其所代表的含义如下:
  • 第1行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)。
  • 第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
  • 第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。
  • 第4行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。
  • 第5行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的

5、编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"

for实现测试:

[root@Centos8 ~]# cat ping1.sh
#!/bin/bash
net=10.0.0.
for((i=1;i<255;i++));do
{
if ping -c1 -w1 ${net}${i} &> /dev/null;then
echo "${net}${i} is success!"
else
echo "${net}${i} is fail!"
fi
}
done
wait

 

while实现测试:

[root@Centos8 ~]# cat ping-while.sh
#!/bin/bash
net=10.0.0
i=1
while ((i<255));do
if ping -c1 -w1 ${net}.${i} &> /dev/null;then
echo "${net}.${i} is success"
else
echo "${net}.${i} is fail"
fi
let i++
done
sleep 0.1

测试结果:

[root@Centos8 ~]# sh ping1.sh
10.0.0.1 is fail!
10.0.0.2 is success!
10.0.0.3 is fail!
10.0.0.4 is fail!
10.0.0.5 is fail!
10.0.0.6 is fail!


6、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间

 crontab -e #执行此命令后输入以下内容即可

[root@Centos8 ~]# crontab -l
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
30 13 * * 1-5 tar -cpf /backup/etcbak-`date -d "1 day ago" +"%Y-%m-%d-%H"`.tar.xz /etc

 

posted @ 2021-12-27 23:48  Kevin0557  阅读(39)  评论(0)    收藏  举报