第六周作业
💡 1、编写脚本实现登陆远程主机(使用expect和shell脚本两种形式)。
👉【expect 形式】
#!/usr/bin/expect
set ip 10.0.0.151
set user root
set password Time.9818
set timeout 5
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
interact
> 执行结果 👇
👉【shell 脚本形式】
#!/bin/bash
ip=$1
user=$2
password=$3
expect << EOF
set timeout 20
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
expect eof
EOF
> 执行结果 👇
💡 2、生成10个随机数保存于数组中,并找出其最大值和最小值。
#!/bin/bash
declare -i min max
declare -a nums
for ((i=0;i<10;i++));do
nums[$i]=$RANDOM
[ $i -eq 0 ] && min=${nums[$i]} && max=${nums[$i]}&& continue
[ ${nums[$i]} -gt $max ] && max=${nums[$i]}
[ ${nums[$i]} -lt $min ] && min=${nums[$i]}
done
echo “All numbers are ${nums[*]}”
echo Max is $max
echo Min is $min
> 执行结果 👇
💡 3、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序。
#!/bin/bash
read -p "请输入数值个数:" COUNT
declare -a nums
for ((i=0;i<$COUNT;i++));do
num[$i]=$RANDOM
done
echo "The initial array:"
echo ${num[@]}
declare -i n=$COUNT
for (( i=0; i<n-1; i++ ));do
for (( j=0; j<n-1-i; j++ ));do
let x=$j+1
if (( ${num[$j]} < ${num[$x]} ));then
#从大到小排列
tmp=${num[$x]}
num[$x]=${num[$j]}
num[$j]=$tmp
fi
done
done
echo "After sort:"
echo ${num[*]}
echo "the max integer is $num,the min integer is ${num[$((n-1))]}"
> 执行结果 👇
💡 4、总结查看系统负载的几种命令,总结top命令的指标大概什么含义(不要求全部写出来)。
w、uptime、mpstat、htop
top:提供动态的实时进程状态
top:命令栏位信息简介
us:用户空间
sy:内核空间
ni:调整nice时间
id:空闲
wa:等待IO时间
hi:硬中断
si:软中断(模式切换)
st:虚拟机偷走的时间
top选项:
-d # 指定刷新时间间隔,默认为3秒
-b 全部显示所有进程
-n # 刷新多少次后退出
-H 线程模式
💡 5、编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"。
注:为了展示能ping通的效果,临时把网段改成 192.168.22.0/24
> for循环脚本
#!/bin/bash
net=192.168.22
for i in {1..254};do
{
ping -w1 -c1 $net.$i &>/dev/null && echo -e "\033[32m $net.$i success! \033[0m" || echo -e "\033[31m $net.$i fail! \033[0m"
}&
done
wait
> 执行结果 👇
# 结果太长,只截取其中一部分用来展示
> while循环脚本
#!/bin/bash
net=192.168.22
ip=1
while [ $ip != "255" ]; do
ping -w1 -c2 $net.$ip &>/dev/null && echo " $net.$ip is success! " || echo " $net.$ip is fail! "
ip=`expr "$ip" "+" "1"`
done
> 执行结果 👇
# 结果太长,只截取其中一部分用来展示
💡 6、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间。
> 脚本
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
# 判断/backup是否存在,如不存在则创建
[ -d /backup ] || mkdir /backup
# 压缩/etc 到指定目录
tar -zcvf /backup/etcbak-`date -d "1 day ago" +"%F_%H"`.tar.xz /etc
> 配置计划任务
30 1 * * 1-5 bash backup.sh
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通