1、编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)。
expect方式
#!/bin/expect
set ip [lindex $argv 0]
set user [lindex $argv 1]
set passwd [lindex $argv 2]
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$passwd\n"}
}
interact
shell方式
#!/bin/bash
ip=$1
user=$2
passwd=$3
expect <<EOF
set timeout -1
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$passwd\n"}
}
expect "#" {send "ifconfig ens33\n"}
expect eof
EOF
2、生成10个随机数保存于数组中,并找出其最大值和最小值
#!/bin/bash
declare -a rand #声明数组
for ((i=0;i<10;i++));do
rand[$i]=$RANDOM
if [ $i -eq 0 ];then
max=${rand[$i]}
min=$max
else
[ $max -lt ${rand[$i]} ] && { max=${rand[$i]};continue; }
[ $min -gt ${rand[$i]} ] && min=${rand[$i]}
fi
done
echo all rand is ${rand[*]}
echo Max rand is $max
echo Min rand is $min
3、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
!/bin/bash
#
declare -a arr
#定义升序排序函数
asc (){
echo "请从键盘输入您想排序的数字,以空格隔开,回车结束:"
read -a arr
len=${#arr[*]}
#冒泡排序法
for ((j=0;j<$len;j++));do
for ((i=0;i<$len-1;i++));do
if [ ${arr[$i]} -gt ${arr[$i+1]} ];then
x=${arr[$i]}
arr[$i]=${arr[$i+1]}
arr[$i+1]=$x
fi
done
done
echo "升序排序后的结果为:" ${arr[*]}
}
#定义降序排序函数
desc (){
echo "请从键盘输入您想排序的数字,以空格隔开,回车结束:"
read -a arr
len=${#arr[*]}
#冒泡排序法
for ((j=0;j<$len;j++));do
for ((i=0;i<$len-1;i++));do
if [ ${arr[$i]} -lt ${arr[$i+1]} ];then
x=${arr[$i]}
arr[$i]=${arr[$i+1]}
arr[$i+1]=$x
fi
done
done
echo "降序排序后的结果为:" ${arr[*]}
}
#死循环,用于从键盘读取排序选项
while :
do
read -p "请输入选项(a:升序排序,d:降序排序,q:退出程序):" flag
case $flag in
a)
#调用升序排序函数,continue用于结束本次循环,但不退出死循环,用于下次选择
asc
continue
;;
d)
#调用降序排序函数,continue用于结束本次循环,但不退出死循环,用于下次选择
desc
;;
q)
#break结束整个程序运行
echo "结束程序,祝您笑口常开:)"
break
;;
*)
#输入其他“非法”字符,需重新输入选项,continue用于结束本次循环,但不退出死循环,用于下次选择
echo "输入选项错误,请重新输入:)"
continue
;;
esac
done
4、总结查看系统负载的几种命令,总结top命令的指标大概什么含义(不要求全部写出来)
top命令查看linux负载:
第一行:
top - 20:08:14 up 42 min, 1 user, load average: 0.87, 0.72, 0.56
20:08:14:系统当前时间
up 42 min:系统开机到现在经过了42分钟
1 users:当前1用户在线
load average:0.87, 0.72, 0.56:系统1分钟、5分钟、15分钟的CPU负载信息
备注:load average后面三个数值的含义是最近1分钟、最近5分钟、最近15分钟系统的负载值。这个值的意义是,单位时间段内CPU活动进程数。如果你的机器为单核,那么只要这几个值均<1,代表系统就没有负载压力,如果你的机器为N核,那么必须是这几个值均<N才可认为系统没有负载压力。
第二行:
Tasks: 280 total, 1 running, 278 sleeping, 0 stopped, 1 zombie
280 total:当前有280个任务
1 running:1个任务正在运行
278 sleeping:175个进程处于睡眠状态
0 stopped:停止的进程数
1 zombie:僵死的进程数
第三行:
%Cpu(s): 5.3 us, 2.7 sy, 0.0 ni, 92.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
5.3 us:用户态进程占用CPU时间百分比
2.7 sy:内核占用CPU时间百分比
0.0 ni:renice值为负的任务的用户态进程的CPU时间百分比,nice是优先级的意思
92.0 id:空闲CPU时间百分比
0.0 wa:等待I/O的CPU时间百分比
0.0 hi:CPU硬中断时间百分比
0.0 si:CPU软中断时间百分比
0.0 st:当前VM中的cpu cycle被虚拟化偷走的比例
第四行:
MiB Mem : 23877.8 total, 18827.4 free, 2516.7 used, 2533.7 buff/cache
323877.8 total:物理内存总数
18827.4 free:空闲的物理内存
2516.7 used: 使用的物理内存
2533.7 cached:用作缓存的内存
第五行:
MiB Mem : 23877.8 total, 18827.4 free, 2516.7 used, 2533.7 buff/cache
23877.8 total:交换空间的总量
18827.4 free:空闲的交换空间
2516.7 used: 使用的交换空间
2533.7 cached:缓存的交换空间
最后一行:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID:进程ID
USER:进程的所有者
PR:进程的优先级
NI:nice值
VIRT:占用的虚拟内存
RES:占用的物理内存
SHR:使用的共享内存
S:进行状态 S:休眠 R运行 Z僵尸进程 N nice值为负
%CPU:占用的CPU
%MEM:占用内存
TIME+: 占用CPU的时间的累加值
COMMAND:启动命令
2) uptime
gw@gw-computer:/data/scritps$ uptime
20:18:14 up 52 min, 1 user, load average: 0.82, 0.69, 0.60
w查看linux负载:
w
gw@gw-computer:/data/scritps$ w
20:18:38 up 52 min, 1 user, load average: 0.54, 0.64, 0.58
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
gw :0 :0 19:26 ?xdm? 20:40 0.00s /usr/lib/gdm3/gdm-x-session --run-script env GNOME_SHELL_SESSION_MODE=ubuntu /usr/bin/gnome-session --systemd --session=ubu
5、编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,
若ping通则输出"success!",若ping不通则输出"fail!"
1.while
#!/bin/bash
#
declare -i i=1
#192.168.0.0/24网段,192.168.0.255为广播地址,不用检测
while [ $i -le 254 ];do
#判断此次命令的执行结果,并将输出到终端的内容输出到/dev/null中
#ping设置连接超时时间为1s,减少脚本运行时间,但是可能会出现错误的判断
#ping3次,与缩短超时时间出现的错误率互补
if ping -W 1 -c 3 192.168.0.$i >> /dev/null;then
echo "192.168.0.$i:success!"
else
echo "192.168.0.$i:fail!"
fi
#i使循环变量每次循环加1,实现所有IP全部被扫到
let i+=1
done
2.for
#!/bin/bash
#
#192.168.0.0/24网段,192.168.0.255为广播地址,不用检测
for ((i=1;i<=254;i++));do
#判断此次命令的执行结果,并将输出到终端的内容输出到/dev/null中
#ping设置连接超时时间为1s,减少脚本运行时间,但是可能会出现错误的判断
#ping3次,与缩短超时时间出现的错误率互补
if ping -W 1 -c 1 192.168.0.$i >> /dev/null;then
echo "192.168.0.$i:success!"
else
echo "192.168.0.$i:fail!"
fi
done
6、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间
#!/bin/bash
#
#如果/backup路径不存在,则创建backup文件夹
[ -d /backup ] || mkdir /backup
backname=`etcbak-date -d-1day +%F-%H`
tar -Jcvf /backup/${backname}.tar.xz /etc/ &> /dev/null