欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Linuxshell脚本练习

时间:2023-06-26
Linux shell脚本练习

一、编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)二、生成10个随机数保存于数组中,并找出其最大值和最小值三、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序四、编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"五、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间六、查看系统负载的几种命令,总结top命令的指标大概什么含义 一、编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)

[root@localhost ~]# cat auto_login_expect#!/bin/expectset ip 192.168.1.118set user rootset password 123456set timeout 15spawn ssh $user@$ipexpect { "yes/no" { send "yesn"; exp_continue } "password" { send "$passwordn" }}interact[root@localhost ~]# expect auto_login_expectspawn ssh root@192.168.1.30The authenticity of host '192.168.1.30 (192.168.1.30)' can't be established.ECDSA key fingerprint is SHA256:td1/tqC4WTpifU86hM76rYi9en5DtfSBICpCBdoj/pw.ECDSA key fingerprint is MD5:31:b4:9c:d6:b9:61:1c:5b:6d:23:23:d7:32:f9:1a:91.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '192.168.1.30' (ECDSA) to the list of known hosts.root@192.168.1.30's password:Last login: Fri Feb 11 22:57:37 2022[root@study ~]# exitlogoutConnection to 192.168.1.30 closed.[root@localhost ~]# expect auto_login_expectspawn ssh root@192.168.1.30root@192.168.1.30's password:Last login: Fri Feb 11 22:58:42 2022 from 192.168.1.31[root@study ~]#[root@localhost ~]# cat remotelogin.sh#!/bin/bashIP=$1USER=$2PASSWORD=$3sshpass -p $PASSWORD ssh -o StrictHostKeyChecking=no $USER@$IP[root@localhost ~]# bash remotelogin.sh 192.168.1.30 root 123456Last login: Fri Feb 11 23:42:12 2022 from 192.168.1.31[root@study ~]#[root@study ~]# hostname -I192.168.1.30[root@study ~]#

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

思想:使用RANDOM生成10个数放在数组中,把数组中的第一个数作为最大值(变量:max),也做为最小值(变量:min)。
然后取数组中的第二个和第一个数做比较,如果大于第一个数,则赋值为max,如果小于第一个数则保持第一个数为最大值;
同时,数组中的第二个和第一个数做比较,如果小于第一个数,则赋值为mix,如果大于第一个数则min保持第一个数为最小值
依照此法,一直到数组中最后一个数(即数组小标为9的数)的比较完成,就可得出最大值和最小值。

[root@felix ~]# cat arr_min_max.sh#!/bin/bashdeclare -i min maxdeclare -a numsfor ((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]}doneecho "all numbers are ${nums[*]}"echo "max is" $maxecho "min is" $min[root@felix ~]# bash arr_min_max.shall numbers are 26473 20770 11745 11618 32526 29224 17443 1254 12763 10058max is 32526min is 1254[root@felix ~]#

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

[root@localhost ~]# cat arr_mao.sh#!/bin/bashread -p "请输入数组的长度:" lenthfor ((n=1;n<=$lenth;n++)); do read -p "请输入1个数到数组,共[$lenth]个数,这是第[$n]个:" arr_nums[$n-1]donelen=${#arr_nums[*]}echo "原来的数组:${arr_nums[*]}"for ((j=0;j<$len;j++)); do for ((i=0;i<$len-1;i++)); do if [ ${arr_nums[$i]} -gt ${arr_nums[$i+1]} ];then x=${arr_nums[$i]} arr_nums[$i]=${arr_nums[$i+1]} arr_nums[$i+1]=$x fi donedoneecho "整理后的数组:${arr_nums[@]}"[root@localhost ~]# bash arr_mao.sh请输入数组的长度:4请输入1个数到数组,共[4]个数,这是第[1]个:3请输入1个数到数组,共[4]个数,这是第[2]个:45请输入1个数到数组,共[4]个数,这是第[3]个:422请输入1个数到数组,共[4]个数,这是第[4]个:1原来的数组:3 45 422 1整理后的数组:1 3 45 422[root@localhost ~]#

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

[root@localhost ~]# cat ping.sh#!/bin/baship=192.168.1.for ((i=1;i<=254;i++));do ping -c 1 $ip$i &>/dev/null if [ $? -eq 0 ];then echo $ip$i:success! else echo $ip$i:fail! fidone[root@localhost ~]# bash ping.sh192.168.1.1:success!192.168.1.2:fail!192.168.1.3:fail!192.168.1.4:fail!192.168.1.5:fail!192.168.1.6:fail!192.168.1.7:fail!192.168.1.8:success!*省略部分输出*[root@localhost ~]# cat ping1.sh#!/bin/baship=192.168.1.i=1while [ $i -lt 255 ];do ping -c 1 $ip$i &>/dev/null [ $? -eq 0 ] && echo $ip$i:success! || echo $ip$i:fail! let i++done[root@localhost ~]# bash ping1.sh192.168.1.1:success!192.168.1.2:fail!192.168.1.3:fail!*省略部分输出*

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

[root@localhost ~]# cat etcbak.sh#!/bin/bash[ -d /backup ] || mkdir -p /backuptar -cJf /backup/etcbak-`date -d yesterday +%F-%H`.tar.xz /etc[root@localhost ~]#[root@localhost ~]# crontab -eno crontab for root - using an empty onecrontab: installing new crontab[root@localhost ~]# crontab -l30 1 * * 1-5 bash baketc.sh &>/dev/null[root@localhost ~]#

六、查看系统负载的几种命令,总结top命令的指标大概什么含义 uptime命令可以获取主机运行的时间,以及系统cpu负载的情况(包括1分钟,5分钟,15分钟内的平均负载)
语法格式 uptime [参数]

[root@localhost ~]# uptime 09:45:15 up 6:16, 2 users, load average: 0.05, 0.03, 0.05

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,常用于服务端性能分析。

[root@localhost ~]# toptop - 09:52:37 up 6:23, 2 users, load average: 0.00, 0.01, 0.05Tasks: 109 total, 1 running, 108 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem : 1863032 total, 1490776 free, 193936 used, 178320 buff/cacheKiB Swap: 3145724 total, 3145724 free, 0 used、 1514864 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2539 root 20 0 162092 2220 1544 R 0.7 0.1 0:00.07 top 31 root 20 0 0 0 0 S 0.3 0.0 0:42.72 kworker/0:1 1 root 20 0 128040 6616 4172 S 0.0 0.4 0:04.34 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.05 kthreadd 4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 5 root 20 0 0 0 0 S 0.0 0.0 0:00.11 kworker/u256:0

参数说明0.2 us,系统用户进程使用 CPU 百分比0.0 sy内核中的进程占用 CPU 百分比load average: 0.00, 0.01, 0.05系统1分钟,5分钟,15分钟内平均负载1863032 total内存总大小193936 used已使用的内存大小 列名含义PID进程IDNI进程优先级S进程状态%CPU上次更新到现在的 CPU 时间占用百分比%MEM进程使用的物理内存百分比TIME+进程使用的 CPU 时间总计,单位 1/100 秒COMMAND命令名/命令行

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。