第四周作业

1、编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)。

  

  目标:10.0.0.4主机上登录10.0.0.5        10.0.0.5的身份:root 密码:root

  

  1、首先安装expect

  

yum install -y  expect

  

  2、写expect脚本

   

#!/usr/bin/expect
set user [lindex $argv 0]
set ip [lindex $argv 1]
set password [lindex $argv 2]

spawn ssh $user@$ip

expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
interact

 

  3、加执行权限并且执行

  chmod +x 

  ./login root 10.0.0.5 root  三个参数依次是用户名 IP 密码

  

  4、看结果

  

 

 SHELL脚本

  1、创建脚本 login.sh

 

#!/bin/bash
user=$1
ip=$2
password=$3
expect <<EOF
spawn ssh $user@$ip
expect {
        "yes/no" { send "yes\n";exp_continue }
        "password" { send "$password\n" }
}
expect eof
EOF

 

  2、执行脚本

  

bash login.sh root 10.0.0.5 root   #注意,一定要写三个参数

 

  3、观察结果

  

 

 

 


2、生成10个随机数保存于数组中,并找出其最大值和最小值

        代码如下

#!/bin/bash
declare -a ARR;


for i in {0..9};do
        ARR[$i]=$RANDOM
done

for i in {0..8};do
        for j in {0..8};do
                if [[ "${ARR[j]}" -gt "${ARR[j+1]}" ]];then
                        TEMP=${ARR[j]};
                        ARR[j]=${ARR[j+1]};
                        ARR[j+1]=${TEMP};
                fi
done
done
echo "${ARR[*]}"
echo min is : ${ARR[0]}
echo max is : ${ARR[9]}

     执行结果如下

 


3、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序

       升序:

#!/bin/bash
NUM=();
count=0;
declare -a ARR;
while read -p"请输入数字,结束输入over  "  ;do
        if [[ $REPLY = over ]];then

#排序算法开始
for((i=0;i<=${#ARR[*]}-2;i++));dofor((j=0;j<=${#ARR[*]}-2;j++));do if [[ "${ARR[j]}" -gt "${ARR[j+1]}" ]];then TEMP=${ARR[j]}; ARR[j]=${ARR[j+1]}; ARR[j+1]=${TEMP}; fi done done
#排序算法止 k
=${#ARR[*]}; echo "min is ${ARR[0]}"; echo "max is ${ARR[k-1]}"; exit; fi ARR[count]=$REPLY; let count++; done

         执行结果

 

 

         beta版本:

 

#!/bin/bash
NUM=();
count=0;
declare -a ARR;
while read -p"请输入数字,结束输入00  "  ;do

        if [[ "$REPLY" =~ ^[0-9]*$ ]];then
                if [[ "$REPLY" = 00 ]];then

                        for((i=0;i<=${#ARR[*]}-2;i++));do
                                for((j=0;j<=${#ARR[*]}-2;j++));do
                                        if [[ "${ARR[j]}" -gt "${ARR[j+1]}" ]];then
                                                TEMP=${ARR[j]};
                                                ARR[j]=${ARR[j+1]};
                                                ARR[j+1]=${TEMP};
                                        fi
                                done
                        done

                        k=${#ARR[*]};
                        echo "all args are ${ARR[*]}"
                        echo "min is ${ARR[0]}";
                        echo "max is ${ARR[k-1]}";
                        exit;
                fi
        else
                echo "输入不合法";
                exit;

        fi
        ARR[count]=$REPLY;
        let count++;
done

 

 

 

倒序:

 

 

#!/bin/bash
NUM=();
count=0;
declare -a ARR;
while read -p"请输入数字,结束输入00  "  ;do

        if [[ "$REPLY" =~ ^[0-9]*$ ]];then
                if [[ "$REPLY" = 00 ]];then

                        for((i=0;i<=${#ARR[*]}-2;i++));do
                                for((j=0;j<=${#ARR[*]}-2;j++));do
                                        if [[ "${ARR[j]}" -lt "${ARR[j+1]}" ]];then
                                                TEMP=${ARR[j]};
                                                ARR[j]=${ARR[j+1]};
                                                ARR[j+1]=${TEMP};
                                        fi
                                done
                        done

                        k=${#ARR[*]};
                        echo "all args are ${ARR[*]}"
                        echo "max is ${ARR[0]}";
                        echo "min is ${ARR[k-1]}";
                        exit;
                fi
        else
                echo "输入不合法";
                exit;

        fi
        ARR[count]=$REPLY;
        let count++;
done
~       

 

 

 使用函数进行代码分块,清晰

以下为倒序---数字从大到小排列,使用函数单独定义算法

函数只能定义在引用前面

#!/bin/bash
  
sort() {

for((i=0;i<=${#ARR[*]}-2;i++));do
        for((j=0;j<=${#ARR[*]}-2;j++));do
                if [[ "${ARR[j]}" -lt "${ARR[j+1]}" ]];then
                          TEMP=${ARR[j]};
                                ARR[j]=${ARR[j+1]};
                                ARR[j+1]=${TEMP};
                fi
        done
done

}




NUM=();
count=0;
declare -a ARR;
while read -p"请输入数字,结束输入00  "  ;do

        if [[ "$REPLY" =~ ^[0-9]*$ ]];then
                if [[ "$REPLY" = 00 ]];then

                        sort;

                        k=${#ARR[*]};
                        echo "all args are ${ARR[*]}"
                        echo "max is ${ARR[0]}";
                        echo "min is ${ARR[k-1]}";
                        exit;
                fi
        else
                echo "输入不合法";
                exit;

        fi
        ARR[count]=$REPLY;
        let count++;
done

 

 


4、总结查看系统负载的几种命令,总结top命令的指标大概什么含义(不要求全部写出来)


5、编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"

    由于网络已经设置10.0.0.0 255,255,255.0 网段,所以如下

使用for循环

#!/bin/bash

IPADD=10.0.0.
for i in {1..128};do
{ ping -c1 -w1 $IPADD$i &>/dev/null && echo "$IPADD$i success" || echo "$IPADD$i fail"; }&
done
wait #后台命令执行完成后,不用敲回车交互即退出

 

 使用while循环

#!/bin/bash
  
IPPREFIX=10.0.0.
IPEND=256
i=1
REALIP=
while(($i<=$IPEND));do
        REALIP=$IPPREFIX$i
        ping -c1 -w1 ${REALIP} &> /dev/null && echo "${REALIP} success" || echo "${REALIP} fail"
        let i++
done

 

6、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间

  1、编写backup.sh脚本,工作日的话对每天进行判断, 

  

  

flag=`date +%w`    #0是周日,6是周六,1-5对应周一到周五

[[ "$flag" =~ [1-5] ]]&& { tar -jcPf /backup/etcbak-`date -s 'yesterday' +%F-%H`.tar.xz /etc; } ||exit;   #注意,[[  ]],两个[[不支持 -a判断且关系,通过脚本判断每天是不是工作日

   2、对脚本加x执行权限

  

chmod +x /root/backup.sh

 

  3、建立周期计划任务

    前提,保证计划任务服务开启

     

systemctl status crontab

 

  crontab -e

 

PATH=/usr/local/tomcat/bin:/apps/httpd/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/bin:/root/bin
30 1 * * * /root/backup.sh

 

 

7、描述密钥交换的过程
8、https的通信过程
9、使用awk以冒号分隔获取/etc/passwd文件第一列

 

posted @ 2022-06-09 19:57  xiaobotianlin  阅读(19)  评论(0编辑  收藏  举报