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/expect
set ip 192.168.1.118
set user root
set password 123456
set timeout 15
spawn ssh $user@$ip
expect {"yes/no" { send "yes\n"; exp_continue }"password" { send "$password\n" }
}
interact
[root@localhost ~]# expect auto_login_expect
spawn ssh root@192.168.1.30
The 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)? yes
Warning: 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 ~]# exit
logout
Connection to 192.168.1.30 closed.
[root@localhost ~]# expect auto_login_expect
spawn ssh root@192.168.1.30
root@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/bash
IP=$1
USER=$2
PASSWORD=$3
sshpass -p $PASSWORD ssh -o StrictHostKeyChecking=no $USER@$IP
[root@localhost ~]# bash remotelogin.sh 192.168.1.30 root 123456
Last login: Fri Feb 11 23:42:12 2022 from 192.168.1.31
[root@study ~]#
[root@study ~]# hostname -I
192.168.1.30
[root@study ~]#

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

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

[root@felix ~]# cat arr_min_max.sh
#!/bin/bash
declare -i min max
declare -a nums
for ((i=0;i<10;i++)); donums[$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
[root@felix ~]# bash arr_min_max.sh
all numbers are 26473 20770 11745 11618 32526 29224 17443 1254 12763 10058
max is 32526
min is 1254
[root@felix ~]#

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

[root@localhost ~]# cat arr_mao.sh
#!/bin/bash
read -p "请输入数组的长度:" lenth
for ((n=1;n<=$lenth;n++)); doread -p "请输入1个数到数组,共[$lenth]个数,这是第[$n]个:" arr_nums[$n-1]
done
len=${#arr_nums[*]}
echo "原来的数组:${arr_nums[*]}"
for ((j=0;j<$len;j++)); dofor ((i=0;i<$len-1;i++)); doif [ ${arr_nums[$i]} -gt ${arr_nums[$i+1]} ];thenx=${arr_nums[$i]}arr_nums[$i]=${arr_nums[$i+1]}arr_nums[$i+1]=$xfidone
done
echo "整理后的数组:${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/bash
ip=192.168.1.
for ((i=1;i<=254;i++));doping -c 1  $ip$i &>/dev/nullif [ $? -eq 0 ];thenecho $ip$i:success!elseecho $ip$i:fail!fi
done
[root@localhost ~]# bash ping.sh
192.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/bash
ip=192.168.1.
i=1
while [ $i -lt 255 ];doping -c 1  $ip$i &>/dev/null[ $? -eq 0 ] && echo $ip$i:success! || echo $ip$i:fail!let i++
done
[root@localhost ~]# bash ping1.sh
192.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 /backup
tar -cJf  /backup/etcbak-`date -d yesterday +%F-%H`.tar.xz /etc
[root@localhost ~]#
[root@localhost ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost ~]# crontab -l
30 1 * * 1-5  bash baketc.sh &>/dev/null
[root@localhost ~]#

六、查看系统负载的几种命令,总结top命令的指标大概什么含义

  1. uptime命令可以获取主机运行的时间,以及系统cpu负载的情况(包括1分钟,5分钟,15分钟内的平均负载)
    语法格式 uptime [参数]
[root@localhost ~]# uptime09:45:15 up  6:16,  2 users,  load average: 0.05, 0.03, 0.05
  1. top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,常用于服务端性能分析。
[root@localhost ~]# top
top - 09:52:37 up  6:23,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 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 st
KiB Mem :  1863032 total,  1490776 free,   193936 used,   178320 buff/cache
KiB Swap:  3145724 total,  3145724 free,        0 used.  1514864 avail MemPID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND2539 root      20   0  162092   2220   1544 R   0.7  0.1   0:00.07 top31 root      20   0       0      0      0 S   0.3  0.0   0:42.72 kworker/0:11 root      20   0  128040   6616   4172 S   0.0  0.4   0:04.34 systemd2 root      20   0       0      0      0 S   0.0  0.0   0:00.05 kthreadd4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H5 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 进程ID
NI 进程优先级
S 进程状态
%CPU 上次更新到现在的 CPU 时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的 CPU 时间总计,单位 1/100 秒
COMMAND 命令名/命令行

Linux shell脚本练习相关推荐

  1. 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程

    Linux Shell脚本教程:30分钟玩转Shell脚本编程 http://c.biancheng.net/cpp/shell/ 转载于:https://www.cnblogs.com/pegasu ...

  2. Linux shell脚本基础学习

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...

  3. linux 检查权限,检查目录下 文件的权限-linux shell脚本,

    检查目录下 文件的权限-linux shell脚本, #!/bin/bash #History: #2019/07/23    Fsq #This Program will check Permiss ...

  4. Linux shell脚本数值计算个人心得

    Linux shell脚本数值计算个人心得 本篇博客为,个人对与bash数值计算的一些心得与用法. Bash对于数值是没有明确定义的,在shell里面所有的数值都默认为字符串,并不是单纯的数值. 比如 ...

  5. linux运维实战练习及linux shell脚本、awk、sed工具命令学习总结

    一.linux shell 脚本 1.描述shell程序的运行原理(可附带必要的图形说明): Linux系统的shell作为操纵系统的外壳,为用户提供使用操纵系统的接口.它是命令语言.命令解释程序及程 ...

  6. linux shell脚本字符串连接符,学习Linux shell脚本中连接字符串的方法

    这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...

  7. linux下实用小脚本,十个增加 Linux Shell 脚本趣味的小工具

    很多人误以为shell脚本只能在命令行下使用.其实shell也可以调用一些GUI组件,例如菜单,警告框,进度条等等.你可以控制最终的输出,光标位置还有各种输出效果.下面我将介绍一些工具,帮助你创建强大 ...

  8. Linux Shell脚本入门--wget 命令用法详解

    Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...

  9. Linux shell脚本基础学习详细介绍(完整版)一

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...

  10. linux sh脚本 while,Linux shell脚本使用while循环执行ssh的注意事项

    原标题:Linux shell脚本使用while循环执行ssh的注意事项 如果要使用ssh批量登录到其它系统上操作时,我们会采用循环的方式去处理,那么这里存在一个巨大坑,你必须要小心了. 一.场景还原 ...

最新文章

  1. python输出数据到excel-python如何导出数据到excel文件
  2. 这 30 个常用的 Maven 命令你必须熟悉!
  3. mysql创建管理密码_mysql 创建用户与授权、修改密码
  4. 调用百度 Echarts 显示重庆市地图
  5. 2017.10.30 覆盖问题 思考记录
  6. java上传文件的二进制_文件的上传:二进制文件的上传;
  7. Reporting service 技巧
  8. python 脚本所在目录,Python 获取当前所在目录的方法详解
  9. 【winfrom】Excel文件加载
  10. js实现全排列组合算法
  11. 关于Google Android平台的ClockworkMod Recovery恢复模式
  12. Prince和学生们2
  13. python如何写日志_python写日志
  14. android自定义View之气球碰撞效果
  15. Codeforces 582B Once Again...【思维YY+Dp(LIS)】好题~
  16. iOS设备分辨率 UI规范 以及适配
  17. 说说JDBC 操作数据库的步骤?
  18. css3怎么实现筛子的效果??transform得常用属性??
  19. 10种最热门的编程语言出道至今历史排行情况-2020年TIOBE最新
  20. CFileDialog控件ID值

热门文章

  1. 鸿蒙liteos,鸿蒙LiteOS-M内核与HUAWEI LiteOS内核对比
  2. 加载更多---vue
  3. vs试用版到期后使用微软邮箱激活
  4. 教你彻底弄清楚dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系
  5. AES解密,key长度不够16处理
  6. Web3术语大全(小白轻松入门Web3)建议收藏
  7. 用jquery实现md5加密
  8. 自从我用了这些浏览器插件,工作效率至少提高了一倍,谷歌浏览器插件
  9. Django计算机毕业设计JAVA高校田径运动会管理python(源码程序+lw+远程部署)
  10. 2014 Multi-University Training Contest 5——by Xiaoxu Guo (ftiasch)