Linux shell脚本练习
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命令的指标大概什么含义
- uptime命令可以获取主机运行的时间,以及系统cpu负载的情况(包括1分钟,5分钟,15分钟内的平均负载)
语法格式 uptime [参数]
[root@localhost ~]# uptime09:45:15 up 6:16, 2 users, load average: 0.05, 0.03, 0.05
- 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脚本练习相关推荐
- 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程
Linux Shell脚本教程:30分钟玩转Shell脚本编程 http://c.biancheng.net/cpp/shell/ 转载于:https://www.cnblogs.com/pegasu ...
- Linux shell脚本基础学习
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...
- linux 检查权限,检查目录下 文件的权限-linux shell脚本,
检查目录下 文件的权限-linux shell脚本, #!/bin/bash #History: #2019/07/23 Fsq #This Program will check Permiss ...
- Linux shell脚本数值计算个人心得
Linux shell脚本数值计算个人心得 本篇博客为,个人对与bash数值计算的一些心得与用法. Bash对于数值是没有明确定义的,在shell里面所有的数值都默认为字符串,并不是单纯的数值. 比如 ...
- linux运维实战练习及linux shell脚本、awk、sed工具命令学习总结
一.linux shell 脚本 1.描述shell程序的运行原理(可附带必要的图形说明): Linux系统的shell作为操纵系统的外壳,为用户提供使用操纵系统的接口.它是命令语言.命令解释程序及程 ...
- linux shell脚本字符串连接符,学习Linux shell脚本中连接字符串的方法
这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...
- linux下实用小脚本,十个增加 Linux Shell 脚本趣味的小工具
很多人误以为shell脚本只能在命令行下使用.其实shell也可以调用一些GUI组件,例如菜单,警告框,进度条等等.你可以控制最终的输出,光标位置还有各种输出效果.下面我将介绍一些工具,帮助你创建强大 ...
- Linux Shell脚本入门--wget 命令用法详解
Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...
- Linux shell脚本基础学习详细介绍(完整版)一
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...
- linux sh脚本 while,Linux shell脚本使用while循环执行ssh的注意事项
原标题:Linux shell脚本使用while循环执行ssh的注意事项 如果要使用ssh批量登录到其它系统上操作时,我们会采用循环的方式去处理,那么这里存在一个巨大坑,你必须要小心了. 一.场景还原 ...
最新文章
- python输出数据到excel-python如何导出数据到excel文件
- 这 30 个常用的 Maven 命令你必须熟悉!
- mysql创建管理密码_mysql 创建用户与授权、修改密码
- 调用百度 Echarts 显示重庆市地图
- 2017.10.30 覆盖问题 思考记录
- java上传文件的二进制_文件的上传:二进制文件的上传;
- Reporting service 技巧
- python 脚本所在目录,Python 获取当前所在目录的方法详解
- 【winfrom】Excel文件加载
- js实现全排列组合算法
- 关于Google Android平台的ClockworkMod Recovery恢复模式
- Prince和学生们2
- python如何写日志_python写日志
- android自定义View之气球碰撞效果
- Codeforces 582B Once Again...【思维YY+Dp(LIS)】好题~
- iOS设备分辨率 UI规范 以及适配
- 说说JDBC 操作数据库的步骤?
- css3怎么实现筛子的效果??transform得常用属性??
- 10种最热门的编程语言出道至今历史排行情况-2020年TIOBE最新
- CFileDialog控件ID值
热门文章
- 鸿蒙liteos,鸿蒙LiteOS-M内核与HUAWEI LiteOS内核对比
- 加载更多---vue
- vs试用版到期后使用微软邮箱激活
- 教你彻底弄清楚dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系
- AES解密,key长度不够16处理
- Web3术语大全(小白轻松入门Web3)建议收藏
- 用jquery实现md5加密
- 自从我用了这些浏览器插件,工作效率至少提高了一倍,谷歌浏览器插件
- Django计算机毕业设计JAVA高校田径运动会管理python(源码程序+lw+远程部署)
- 2014 Multi-University Training Contest 5——by Xiaoxu Guo (ftiasch)