1、脚本实现登陆远程主机。(使用expect和shell脚本两种形式)。
方式1:
#!/usr/bin/expect
spawn ssh 10.0.0.7
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "123456\n" }
}
expect eof
方式2:
#!/bin/bash
#
expect <<EOF
set timeout 20
spawn ssh root@x.x.x.x
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "123456\n" }
}
expect "]#"
send "date\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[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
3、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
#!/bin/bash
#输入提示
echo "input several number:"
#-a将输入的值读取到数组array里
read -a array
#将数组的长度单独拿出来可以提高效率,使用let使变量-1,${#array[*]}获取数组的长度
let length=${#array[*]}-1
#冒泡排序的双层循环,$length获取length的值
for((i=0;i<$length;i++)){
for((j=0;j<$length-i;j++)){
if [ ${array[j]} -gt ${array[j+1]} ];then
#交换数据
temp=${array[j]}
array[j]=${array[j+1]}
array[j+1]=$temp
fi
}
}
#输出排序后的数组,${array[*]}输出数组中的所有元素
echo "after sort:${array[*]}"
4、总结查看系统负载的几种命令,总结top命令
uptime ##类top第一行:系统运行时间、登入用户数、系统负荷1、5、15分钟
free ##查看内存,-h、m、g、-b字节、-s 后接刷新时间、-c 后接刷新次数
vmstat ##查看系统资源、IO等情况,后接刷新时间,单位秒,如“vmstat -S m 2”
iostat -d sda -t -k 1 3 ##-c 只显示CPU行、-d 显示设备〈磁盘)使用状态、-k 以千字节为为单位显示输出
iotop ##动态查看系统io使用情况。 1)左右箭头改变排序方式,默认是按IO排序;2)r反向排序;3)o 实际IO输出的进程;4)q退出
dstat ##查看CPU、磁盘IO、网络IO(可用于代替vmstat、iostat功能)
iftop ##在epel源中,动态查看网络io使用情况。-n 不显示名称,-i eth0指定接口
top:显示内容如下
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
load average:1分钟、5分钟、15分钟cpu负载
us:用户空间、sy:内核空间、ni:调整nice时间、id:空闲、wa:等待IO时间、hi:硬中断、si:软中断(模式切换)、st:虚拟机偷走的时间
PID:进程的PID
USER:进程属主的名字
PR:进程的优先级
NI:进程的nice值
VIRT:进程占用的虚拟内存总量,单位kb。进程申请的内存大小,不是实际使用量。虚拟内存
RES:进程当前使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA。常驻内存
SHR:进程和其他进程共享的内存总量。共享内存
DATA:数据内存空间,真正程序使用的数据空间。
S:进程状态,D、代表可中断的休眠状态,R代表在运行状态,S代表休眠状态,T代表跟踪状态或停止状态,Z代表僵化状态
%CPU:进程使用的cpu时间比例
%MEM:进程使用的内存占可用内存的比例
TIME+:自进程启动到目前为止的cpu时间总量
COMMAND:进程所对应的命令行名称也就是启动的程序
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
快捷键包括:
首部信息显示:
uptime信息:l命令
tasks及cpu信息:t命令
cpu分别显示:1 (数字)
memory信息:m命令
按 z 改变颜色
按 r 修改nice值
按 k 输入signal号,杀死进程
按 s 修改刷新时间
按b 显示PPID
按f 进入交互页面,选择指定的列显示 --> 按a-z即可显示或隐藏对应的列,回车确定
按o 改变列的显示顺序,按a-z列向右移动,按A-Z列向左移动,回车确定
按F或O,然后按s可以将进程按照相应的列进行排序,回车确定。按R将当前倒序
按 N(以PID来排序)、按T(以CPU使用时间排序)、按P(以CPU使用排序)、按M(以内存使用排序)
帮助:h 或 ? ,按 q 或esc 退出帮助
按q:退出
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5、编写脚本,使用for和while分别实现192.168.200.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"
方式1:
#!/bin/bash
#
GREEN="\033[1;32m"
RED="\033[1;31m"
END="\033[0m"
net=192.168.200
for i in {1..254};do
{
if ping -c1 -W1 $net.$i &> /dev/null;then
echo -e "${GREEN}Success:${END} $net.$i is up"
else
echo -e "${RED}Fail:${END} $net.$i is down"
fi
}&
done
wait
方式2:
#!/bin/bash
#
GREEN="\033[1;32m"
RED="\033[1;31m"
END="\033[0m"
net=192.168.200
i=1
while [ $i -lt 255 ]
do
let i=$i+1
{
if ping -c1 -W1 $net.$i &> /dev/null;then
echo -e "${GREEN}Success:${END} $net.$i is up"
else
echo -e "${RED}Fail:${END} $net.$i is down"
fi
}&
done
wait
6、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间:
crontab -e ##添加如下内容
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
30 1 * * 1-5 tar -JcvPf /backup/etcbak-`date -d "-1 day" +\%F`.tar.xz /etc/ &> /dev/null