-
shell脚本实现文件锁功能
2020-09-15 18:39:36主要介绍了shell脚本实现文件锁功能,本文实现了一个排它锁,从而实现避免脚本重复执行,需要的朋友可以参考下 -
shell脚本实现进度条功能
2017-07-02 22:49:47一,什么是shell脚本。一个 shell 脚本就是一个包含一系列命令的文件。shell 读取这个文件,然后执行 文件中的所有命令,就好像这些命令已经直接被输入到了命令行中一样。Shell 有些独特,因为它不仅是一个功能强大...一,什么是shell脚本。
一个 shell 脚本就是一个包含一系列命令的文件。shell 读取这个文件,然后执行 文件中的所有命令,就好像这些命令已经直接被输入到了命令行中一样。
Shell 有些独特,因为它不仅是一个功能强大的命令行接口,也是一个脚本语言解释器。我们将会看到, 大多数能够在命令行中完成的任务也能够用脚本来实现,同样地,大多数能用脚本实现的操作也能够 在命令行中完成。另外shell里面变量是弱变量类型的,这就意味着我们可以在任何时候直接使用变量,而不用定义。
二,用shell脚本实现进度条
2.1 初始版本:#!/bin/bash i=0 str="" arry=("\\" "|" "/" "-") while [ $i -le 100 ] do let index=i%4 printf "[%-100s] %d %c\r" "$str" "$i" "${arry[$index]}" sleep 0.1 let i=i+1 str+="#" done printf "\n"
arry是我们定义的数组,它用来交替显示{“\”,”|”,”/”,”-“} 这四个字符中的一个,由于“\”在Linux中含有特殊含义,所以需要用两个“\”,一个起转义作用。
i用来记录当前进度,从0-100,每次使str=str+”#”,while循环每次输出str,进度,及arry中的字符。运行结果:
2.2 改进版
首先看一下运行结果:
此时运行将会以颜色显示,并且在百分之20,百分之45,百分之75及之上显示不同的颜色,即产生颜色交替。该功能是在打印的时候加上颜色选项实现的,而颜色的代号又是个变量,在不同的区间会有不同的选择。
以下为实现代码:#!/bin/bash i=0 str="" arry=("\\" "|" "/" "-") while [ $i -le 100 ] do let index=i%4 if [ $i -le 20 ] then let color=44 let bg=34 elif [ $i -le 45 ] then let color=43 let bg=33 elif [ $i -le 75 ] then let color=41 let bg=31 else let color=42 let bg=32 fi printf "\033[${color};${bg}m%-s\033[0m %d %c\r" "$str" "$i" "${arry[$index]}" usleep 30000 let i=i+1 str+="#" done printf "\n"
与版本1不同之处便在我们在打印的时候加入了颜色属性,首先我们来学习一下如何在Linux中打出带有颜色的字体
文本终端的颜色可以使用“ANSI非常规字符序列”来生成。举例:
printf(“\033[字背景颜色;字体颜色m字符串\033[0m” );
示例:
printf(“\033[40;37 this will be colored\n\033[0m”);
echo -e “\033[40;37this will be colored\n\033[0m”
其中40,37分别代表字体背景颜色及字体颜色,在这里我们只需要将字体颜色与字体背景颜色选为相同的,便可以实现上图的功能。以下为常用的颜色代号:
字背景颜色范围: 40--49 字颜色: 30--39 40: 黑 30: 黑 41: 红 31: 红 42: 绿 32: 绿 43: 黄 33: 黄 44: 蓝 34: 蓝 45: 紫 35: 紫 46: 深绿 36: 深绿 47: 白色 37: 白色
-
Shell脚本实现的单机流量统计功能
2020-09-15 18:32:11主要介绍了Shell脚本实现的单机流量统计功能,本文给出实现代码和使用方法,及运行结果,需要的朋友可以参考下 -
shell脚本实现ftp上传下载文件功能
2020-09-14 23:06:57主要介绍了shell脚本实现ftp上传下载文件功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下 -
shell脚本实现监控shell脚本的执行流程及变量的值
2020-09-15 17:50:22主要介绍了shell脚本实现监控shell脚本的执行流程及变量的值本文使用shell完成对执行过程中条件语句中的变量的变化的监控和整个程序的执行流程的观察功能,需要的朋友可以参考下 -
Spring Boot调用 Shell 脚本实现看门狗功能
2020-08-19 02:08:46主要介绍了Spring Boot调用 Shell 脚本实现看门狗功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 -
Shell脚本实现删除一年前文件功能分享
2020-09-15 17:57:43主要介绍了Shell脚本实现删除一年前文件功能分享,本文直接给出实现代码,需要的朋友可以参考下 -
Shell脚本实现根据端口号kill相应进程功能
2020-09-15 18:41:45主要介绍了Shell脚本实现根据端口号kill相应进程功能,本文相对简单,只有一句话,需要的朋友可以参考下 -
shell脚本实现mysql定时备份、删除、恢复功能
2020-09-09 00:33:08主要介绍了shell脚本实现mysql定时备份、删除、恢复功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 -
Shell脚本实现自动修改IP、主机名等功能分享
2020-09-15 18:25:01主要介绍了Shell脚本实现自动修改IP、主机名等功能分享,本文直接给出实现代码,需要的朋友可以参考下 -
利用shell脚本实现计划任务功能
2017-02-21 16:59:47利用shell脚本实现计划任务功能 一、mytask 实现功能: 1、多任务并发执行,不会互相影响,采用锁机制避免单个任务的重叠执行。 2、每个任务以单独脚本形式保存,相互独立。 3、支持起始运行时间,如"2013/05/...利用shell脚本实现计划任务功能一、mytask 实现功能:1、多任务并发执行,不会互相影响,采用锁机制避免单个任务的重叠执行。2、每个任务以单独脚本形式保存,相互独立。3、支持起始运行时间,如"2013/05/08"、"13:30"或“now”。并且支持给起始运行时间的修正值,比如"now+5m"表示当前时间的5分钟后执行(另外还实现了负数修正值,比如-1h,现在觉得这个功能挺无聊的)。4、支持多种类型的运行周期设定,包括秒、分、时、天、周、月、年还有一次性任务。5、会根据任务执行间隔,自动设定休眠时间,主程序占用资源极小。6、任务可以是SHELL脚本,也可以是直接的linux命令。7、独立的任务配置文件,集中定义任务内容、起始时间和运行间隔。(个人感觉比crontab的设定更直观)8、支持运行时重载任务配置文件,无需重启主程序就可以将调整后的任务加入计划。二、任务配置文件说明:默认的任务配置文件为主程序目录下的mytask.conf每一行配置对应一个计划任务,配置项之间以逗号分隔,任务配置定义如下:<任务内容>,<起始运行时间>,<运行周期>1、任务内容,可以是脚本文件、命令等。要注意写全文件或命令的路径,可以使用全局变量$BASEDIR代表主程序所在目录。复杂的命令建议保存在脚本文件中。2、起始运行时间分两部分。第一部分为初始时间,格式为"yyyy/MM/dd hh:mm:ss"也可以是时间值片断,例如:"2013/03/05"、"03/05"、“03/05 21:30”、"21:30"或当前时间"now"。第二部分为修正时间,格式为"+时间单位"或“-时间单位”,意思为在初始时间的基础上做进一步的时间修正。例如:"+5s"、"-10m"等。时间的单位区别大小写,具体定义如下:y=年、M=月、d=日、h=时、m=分、s=秒、w=星期3、运行周期即为任务函数运行的间隔时间,取值与修正时间类似,只是取消了+-号,如果值为不带单位的0则表示只运行一次。任务定义示例如下:#在凌晨零点开始执行,每隔1天运行一次。$BASEDIR/tasks/backdb.sh,00:00,1d#在当前时间的2分钟后开始执行,每隔1个月运行一次。$BASEDIR/tasks/test1.sh,now+2m,1M#在5月12日14点30开始执行,每隔1小时运行一次。/home/lykyl/sp.sh,5/12 14:30,1h#在15:50点开始执行,每隔30秒运行一次。$BASEDIR/tasks/test3.sh,15:50,30s#启动即开始执行,每隔1分钟运行一次。touch /tmp/ohyeah,now,1m#在当前时间的1小时后开始执行,只运行一次。$BASEDIR/tasks/test5.sh,now+1h,0三、程序控制命令1、启动nohup ./mytask.sh &2、退出kill -15 `cat ./mytask.pid`3、运行时重新加载任务配置文件kill -SIGUSR1 `cat ./mytask.pid` -
Shell脚本实现回收站的功能
2019-09-22 18:48:03到目前为止,非图形化的Linux还没有回收站的命令。 那么,我们如果不小心将某一个文件...把此脚本放入/usr/local/bin目录下,然后使用del 123.txt就可以将文件放入回收站,而不是真的删除。而且可以"删除"同名的文件。 -
shell脚本实现ssh自动登录功能分享
2020-09-15 20:15:22mac下没有找到好用的类似secureCRT,就自己写了个自动登录的脚本,分享一下,如果是新浪的,就基本不用修改代码就直接能用 -
redchat怎么编写shell脚本_Shell脚本实现简单跳板机
2020-12-19 11:02:02Shell脚本实现简单跳板机阅读: 1223 | 文章分类: Shell | Tag: 系统  跳板机是一个可以实现跳转登陆的一个功能机器,使用者必须先跳转到跳板机再通过跳板机登陆到其他应用服务器上,这个虽然有点绕...Shell脚本实现简单跳板机
阅读: 1223 | 文章分类: Shell | Tag: 系统  
跳板机是一个可以实现跳转登陆的一个功能机器,使用者必须先跳转到跳板机再通过跳板机登陆到其他应用服务器上,这个虽然有点绕,但在某种程度上讲,这个会起到一定的保护作用。
现在有很多跳板机服务提供商都把跳板机做得很好,甚至大多数都是有一个web管理界面,涵盖了用户/用户组管理、资产管理、授权规则、会话日志等等功能,但我们今天要来做的是一个能简单实现跳转的shell

如上图,传统意义上,如果要去连一台服务器就得去保存以下密码,而且还得手动去连,但如果做了堡垒机,直接就可以跳到任意一台服务器上

堡垒机的作用是方便用户跳过去另外一台服务器上,只放行堡垒机IP可以连,其他机器都无法ssh连上去,这是能起到一个保护作用。但如果你要是跟我说,万一堡垒机被黑了那全部机不就等于被黑了,这个问题我也想过,但我想更重要的是你对堡垒机做的一个安全措施,如何去防御我这里不多讲,我这里只讲实现的方式而已。
## 涵盖知识点
一、环境变量的使用
二、while循环
三、trap屏蔽命令的使用
## 环境说明
```
使用的是虚拟机,系统为CentOS7-1708
堡垒机IP:192.168.112.9 (Server-9)
服务器IP:192.168.112.8 (Server-8)
其他 IP:192.168.112.7 (无此主机,装饰作用)
192.168.112.6 (无此主机,装饰作用)
```
我们开始写脚本
```
[root@Server-9 ~]# vim board.sh
#!/bin/bash
trap "" HUP INT QUIT TSTP
while true;do
cat <
1、Server-8
2、Server-7
3、Server-6
EOP
read -p "请输入您要跳转的服务器序号:" UIP
case "$UIP" in
1)
ssh root@192.168.112.8
;;
2)
ssh root@192.168.112.7
;;
3)
ssh root@192.168.112.6
;;
*)
echo "输入有误,请重新输入!"
esac
done
```
#### [脚本下载地址](https://www.cloudhy.cn/uploads/Shell/board.sh "脚本下载地址")
如果单纯只是ssh连接过去,那退出后就退出这个脚本程序了,所以我们使用了一个while做一个死循环,用户退出不了,加上使用trap来捕捉用户的结束信号,所以这个程序相当于一个守护进程(后面的引号表示捕捉到后面的信号后什么都不做,而后面几个“HUP INT QUIT TSTP”是终止信号,可以使用kill -l查看所有终止信号的名称,这里可以使用终止信号的序号)
赋予执行权限
```
[root@Server-9 ~]# chmod u+x board.sh
```
写完脚本,我们再来创建一个用户
```
[root@Server-9 ~]# useradd board
```
将用户密码设置为123
```
[root@Server-9 ~]# passwd board
```
设置完了之后我们将脚本拷贝到board的home目录下
```
[root@Server-9 ~]# mv board.sh /home/board/
```
再修改该文件所有者跟
```
[root@Server-9 ~]# chown board. /home/board/board.sh
```
然后我们将所有要做跳转的服务器做个免密认证 [ [如何做免密认证?](https://www.cloudhy.cn/article/27 "Linux免密登陆")]
```
[board@Server-9 ~]$ ssh-keygen
[board@Server-9 ~]$ ssh-copy-id root@192.168.112.8
```
最后修改用户的.bash_profile文件,让用户一登陆上来就执行这个脚本程序
```
[board@Server-9 ~]$ vim /home/board/board.sh
# 行未加一行
~/board.sh
```
现在已经把跳板机给做好了,可以登陆测试以下,用户登陆后就执行board.sh而且还没办法退出去,这就实现了跳板机的作用
```
# 运行结果
[root@localhost ~]# su - board # 一登陆board用户就执行了board.sh的脚本程序
上一次登录:五 4月 20 09:44:58 CST 2018pts/0 上
1、Server-8
2、Server-7
3、Server-6
请输入您要跳转的服务器序号:
请输入您要跳转的服务器序号:^C^C^C # 用户按Ctrl+C结束进程被捕捉后无操作
输入有误,请重新输入!
1、Server-8
2、Server-7
3、Server-6
请输入您要跳转的服务器序号:1 # 选择登陆的服务器
Last login: Mon Apr 23 20:55:18 2018 from 192.168.112.9
[root@localhost ~]# 登出 # 用户登出远程服务器后回到跳板机程序中
Connection to 192.168.112.8 closed.
1、Server-8
2、Server-7
3、Server-6
请输入您要跳转的服务器序号:
```
-
Shell脚本实现倒计时功能
2019-04-21 14:29:20效果图如下: #!/bin/bash #AUTHOR:AN ...# 通过echo命名的不换行功能,将三列数字同时输出,每个数字分成9行 # 通过for循环每次输出一行内容 #PEOBLEM:如何在计时结束后按Ctrl+c退出,且显示光标...效果图如下:
#!/bin/bash #AUTHOR:AN #DATE:2019-04-21 #FUNCTION:屏幕显示倒计时 #DESCRIBE:模拟单片机中数码管的数字显示形状,先把0~9中的每个数字造出来 # 通过echo命名的不换行功能,将三列数字同时输出,每个数字分成9行 # 通过for循环每次输出一行内容 #PEOBLEM:如何在计时结束后按Ctrl+c退出,且显示光标 #显示8个红色空格 red(){ for i in `seq $1` do echo -e "\033[41m \033[0m\c" done } #显示8个白色空格 white(){ for i in `seq $1` do echo -e "\033[8m \033[0m\c" done } #组成数字的元素 YS[0]=`red 1;white 6;red 1;white 8` #1 1 YS[1]=`white 7;red 1;white 8` #右1 YS[2]=`red 1;white 7;white 8` #左1 YS[3]=`red 8;white 8` #- YS[4]=`white 8;white 8;white 8` #控制左边留出空白 ############################################################## #将0~9的所有数字一次存入数组NUM中 #0 NUM[0]=`echo ${YS[3]}` NUM[1]=`echo ${YS[0]}` NUM[2]=`echo ${YS[0]}` NUM[3]=`echo ${YS[0]}` NUM[4]=`echo ${YS[0]}` NUM[5]=`echo ${YS[0]}` NUM[6]=`echo ${YS[0]}` NUM[7]=`echo ${YS[0]}` NUM[8]=`echo ${YS[3]}` #1 NUM[9]=`echo ${YS[1]}` NUM[10]=`echo ${YS[1]}` NUM[11]=`echo ${YS[1]}` NUM[12]=`echo ${YS[1]}` NUM[13]=`echo ${YS[1]}` NUM[14]=`echo ${YS[1]}` NUM[15]=`echo ${YS[1]}` NUM[16]=`echo ${YS[1]}` NUM[17]=`echo ${YS[1]}` #2 NUM[18]=`echo ${YS[3]}` NUM[19]=`echo ${YS[1]}` NUM[20]=`echo ${YS[1]}` NUM[21]=`echo ${YS[1]}` NUM[22]=`echo ${YS[3]}` NUM[23]=`echo ${YS[2]}` NUM[24]=`echo ${YS[2]}` NUM[25]=`echo ${YS[2]}` NUM[26]=`echo ${YS[3]}` #3 NUM[27]=`echo ${YS[3]}` NUM[28]=`echo ${YS[1]}` NUM[29]=`echo ${YS[1]}` NUM[30]=`echo ${YS[1]}` NUM[31]=`echo ${YS[3]}` NUM[32]=`echo ${YS[1]}` NUM[33]=`echo ${YS[1]}` NUM[34]=`echo ${YS[1]}` NUM[35]=`echo ${YS[3]}` #4 NUM[36]=`echo ${YS[0]}` NUM[37]=`echo ${YS[0]}` NUM[38]=`echo ${YS[0]}` NUM[39]=`echo ${YS[0]}` NUM[40]=`echo ${YS[3]}` NUM[41]=`echo ${YS[1]}` NUM[42]=`echo ${YS[1]}` NUM[43]=`echo ${YS[1]}` NUM[44]=`echo ${YS[1]}` #5 NUM[45]=`echo ${YS[3]}` NUM[46]=`echo ${YS[2]}` NUM[47]=`echo ${YS[2]}` NUM[48]=`echo ${YS[2]}` NUM[49]=`echo ${YS[3]}` NUM[50]=`echo ${YS[1]}` NUM[51]=`echo ${YS[1]}` NUM[52]=`echo ${YS[1]}` NUM[53]=`echo ${YS[3]}` #6 NUM[54]=`echo ${YS[3]}` NUM[55]=`echo ${YS[2]}` NUM[56]=`echo ${YS[2]}` NUM[57]=`echo ${YS[2]}` NUM[58]=`echo ${YS[3]}` NUM[59]=`echo ${YS[0]}` NUM[60]=`echo ${YS[0]}` NUM[61]=`echo ${YS[0]}` NUM[62]=`echo ${YS[3]}` #7 NUM[63]=`echo ${YS[3]}` NUM[64]=`echo ${YS[0]}` NUM[65]=`echo ${YS[0]}` NUM[66]=`echo ${YS[0]}` NUM[67]=`echo ${YS[1]}` NUM[68]=`echo ${YS[1]}` NUM[69]=`echo ${YS[1]}` NUM[70]=`echo ${YS[1]}` NUM[71]=`echo ${YS[1]}` #8 NUM[72]=`echo ${YS[3]}` NUM[73]=`echo ${YS[0]}` NUM[74]=`echo ${YS[0]}` NUM[75]=`echo ${YS[0]}` NUM[76]=`echo ${YS[3]}` NUM[77]=`echo ${YS[0]}` NUM[78]=`echo ${YS[0]}` NUM[79]=`echo ${YS[0]}` NUM[80]=`echo ${YS[3]}` #9 NUM[81]=`echo ${YS[3]}` NUM[82]=`echo ${YS[0]}` NUM[83]=`echo ${YS[0]}` NUM[84]=`echo ${YS[0]}` NUM[85]=`echo ${YS[3]}` NUM[86]=`echo ${YS[1]}` NUM[87]=`echo ${YS[1]}` NUM[88]=`echo ${YS[1]}` NUM[89]=`echo ${YS[3]}` #读取位置变量分钟,并转化为秒 display(){ time=$[$1*60] while [ $time -ge 0 ] do #数值处理 ge=$[time%100%10*9] shi=$[time%100/10*9] bai=$[time/100*9] clear #输出空白行,是数字居中 for i in {0..6} do echo done for i in {0..8} do echo ${YS[4]}${NUM[$[bai+i]]}${NUM[$[shi+i]]}${NUM[$[ge+i]]} done sleep 1 let time-- done sleep 2 echo echo echo -e "\033[?25h" #显示光标 } #############################主程序############################# clear echo -e "\033[?25l" #隐藏光标 display $1
-
Shell脚本实现的memcached进程监控
2020-09-15 19:37:56主要介绍了Shell脚本实现的memcached进程监控,实现功能为监控memcached进程是否存在,不存在则启动memcached并重载nginx,需要的朋友可以参考下 -
shell脚本实现多线程
2019-08-09 20:32:31基于最近的工作,记录一下使用shell脚本实现在当前目录下的子目录并发查找,并将结果回收的功能。 主脚本 main.sh 实现分发查找功能,在for循环中使用&即可将线程置于后台执行,注意使用wait关键字等待所有线程... -
shell脚本实现sequoiadb数据导出功能
2016-10-18 11:31:38Shell变量定义变量名称和赋值符号“=”之间不能有空格,否则会报语法错误 2 变量引用 引用参数使用$参数序号,引用脚本定义的变量则用$变量名称 3 if条件语句 使用[]包裹条件,语法为if[condition] ... -
java实现看门狗_Spring Boot调用 Shell 脚本实现看门狗功能
2021-02-26 18:03:12需要实现看门狗功能,定时检测另外一个程序是否在运行,使用 crontab 仅可以实现...最后决定使用 Spring Boot 调用 Shell 脚本来实现一、脚本1.1 启动脚本#!/bin/bashps -ef | grep "demo-app-0.0.1-SNAPSHOT.jar... -
shell 脚本实现arm指令比对功能
2021-01-13 11:12:441、参考...2、完整的脚本如下(下一步改造未python方式实现) #!/bin/bash # the objdump format of arm similar as # 0000000000fa19d0 <forms_>: # fa19d0: d0133c81 adrp x1, -
Shell脚本实现检测某ip网络畅通情况(含短信报警功能)
2020-09-15 18:41:09主要介绍了Shell脚本实现检测某ip网络畅通情况(含短信报警功能),本文脚本针对一个服务器IP进行检查,也可改造一下,执行个多个IP的检查,需要的朋友可以参考下