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反向排序;3o 实际IO输出的进程4q退出

dstat           ##查看CPU、磁盘IO、网络IO(可用于代替vmstat、iostat功能)

iftop           ##在epel源中,动态查看网络io使用情况。-n 不显示名称,-i eth0指定接口

 

top:显示内容如下

6、shell脚本和计划任务_shell脚本

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

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