1、编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)。
使用expect登录远程主机:
#!/usr/bin/expect
spawn ssh root@10.0.0.160
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "123456\n" }
}
expect "]#" { send "echo ok\n"}
expect "]#" { send "exit\n"}
interact
shell脚本实现:
#!/bin/bash
read -p "请输入IP:" ip
port=22
expect <<EOF
set timeout 20
spawn ssh -p $port root@$ip
expect {
"yes/no" { send "yes\n";exp_continue}
"password" { send "123456\n"}
}
expect "#" {send "echo haha\n"}
expect "#" {send "exit\n" }
expect eof
EOF
2、生成10个随机数保存于数组中,并找出其最大值和最小值
#!/bin/bash
max=0
min=0
#生成10个随机数
for i in `seq 10`
do
a[$i]=$RANDOM;
echo a[$i]=${a[$i]}
done
max=${a[1]}
min=${a[1]}
比较大小,找出最大最小。
for i in `seq 10`
do
if [ $max -lt ${a[$i]} ];then
max=${a[$i]}
elif [ $min -gt ${a[$i]} ];then
min=${a[$i]}
fi
done
echo "max=$max and min=$min"
3、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
#!/bin/bash
read -p "请输入生成多少个随机数:" num
#创建数组
for i in `seq $num`
do
a[$i]=$RANDOM
echo a[$i]=${a[$i]}
done
#echo ${#a[@]}
echo "====================================="
b=0
l=0
for j in `seq $num`
do
for k in `seq $[num-j]`
do
if [ ${a[$k]} -gt ${a[$[k+1]]} ];then
b=${a[$[k+1]]}
a[$[k+1]]=${a[$k]}
a[$k]=$b
#l=$k
#k=$j
#j=$l
fi
done
#echo a[$j]=${a[$j]}
done
for n in `seq $num`
do
echo a[$n]=${a[$n]}
done
[注]目前只是排好大小,并没有让数组编号变动。需要改进。
4、总结查看系统负载的几种命令,总结top命令的指标大概什么含义(不要求全部写出来)
第一行: top - 12:51:59 up 53 days, 12:19, 1 user, load average: 0.00, 0.01, 0.05
12:51:59:系统当前时间
up 53 days, 12:19:系统运行时间
1 user:在线用户数
load average: 0.00, 0.01, 0.05:系统1分钟、5分钟、15分钟的CPU负载信息,最多不能超过5
第二行:Tasks: 83 total, 2 running, 81 sleeping, 0 stopped, 0 zombie
83 total:当前系统83个任务;
1 running:正在运行中的任务:2个
82 sleeping:正在休眠的任务:81个
0 stopped:已经停止的任务:0个
0 zombie:僵尸任务:0个
第三行:%Cpu(s): 0.0 us, 3.2 sy, 0.0 ni, 96.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
0.0 us:用户态进程占用CPU时间百分比
3.2 sy:内核占用CPU时间百分比
0.0 ni:renice值为负的任务的用户态进程的CPU时间百分比。nice是优先级的意思。值得范围:-20~19
96.8 id:空闲CPU时间百分比
0.0 wa:等待I/O的CPU时间百分比
0.0 hi:CPU硬中断时间百分比
0.0 si:CPU软中断时间百分比
0.0 st:这个虚拟机被hypervisor偷去的CPU时间
第四行:KiB Mem : 1776404 total, 117932 free, 147680 used, 1510792 buff/cache
1776404 total:内存总大小:1.7G
117932 free:空闲内存总量:0.11G
147680 used:空闲内存总量:0.14G
1510792 buff/cache:缓存的内存量:1.5G
第五行:KiB Swap: 0 total, 0 free, 0 used. 1425128 avail Mem
0 total:交换区总量:0G
0 free:空闲交换区:0G
0 used:已用交换区:0G
1425128 avail Mem:可用交换区内存:1.4G
第六行:PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID:进程ID
USER:进程所有者的实际用户名
PR:进程的调度优先级,这个字段的一些值是'rt'。这意味这这些进程运行在实时态。
NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级,值得范围:-20~19
VIRT:进程使用的虚拟内存:进程使用的虚拟内存总量,单位kb,VIRT=SWAP+RES
RES:占用得内存大小,单位kb
SHR:HR是进程使用的共享内存单位kb
S:这个是进程的状态。它有以下不同的值:
- D - 不可中断的睡眠态。
- R – 运行态
- S – 睡眠态
- T – 被跟踪或已停止
- Z – 僵尸态
%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。
%MEM:进程使用的物理内存百分比。
TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
COMMAND:运行进程所使用的命令或程序。
5、编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"up",若ping不通则输出"down"
for循环:
#!/bin/bash
ip=192.168.0.
for i in `seq 254`
do
( ping -c2 -W1 $ip$i &> /dev/null && echo "$i is up" || echo "$i is down" )&
done
wait
while循环:
#!/bin/bash
i=1
while [ $i -le 254 ];do
( ping -c2 -W1 "192.168.0.$i" &>/dev/null && echo "192.168.0.$i is up" || echo "192.168.0.$i is down" )&
let i++
done
6、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间
编写备份脚本:
#!/bin/bash
cd /etc/
time=`date -d "-1 day" +%F-%H:%M`
tar -Jcvf /backup/etcbak-${time}.tar.xz /etc/ &> /dev/null
开启计划任务: