第四周作业
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文件第一列