60天shell脚本计划-11/12-渐入佳境
--作者:飞翔的小胖猪
--创建时间:2021年3月18日
--修改时间:2021年3月22日
说明
每日上传更新一个shell脚本,周期为60天。如有需求的读者可根据自己实际情况选用合适的脚本,也可在评论区留言提出脚本需求,作者会尽快根据需求编写相关脚本对功能进行实现。
每篇文章包含5个脚本。
总进度:11/12
上一篇脚本链接:https://www.cnblogs.com/Pigs-Will-Fly/p/14539999.html
下一篇脚本链接:https://www.cnblogs.com/Pigs-Will-Fly/p/14706885.html
主要内容
21年3月18日-批量启动容器脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
获取到当前系统中没有启动容器,批量启动docker容器。
文件说明
startup_docker_container.sh:脚本主体文件
脚本主体
[root@135 51_startup_docker_container]# cat startup_docker_container.sh
#!/bin/bash
show_container_list(){
#获取当前系统中不是已经退出的容器,两条语句任选其一。
container_list=`docker container ls -a | awk '/Exited/{print $1}'`
#container_list=`docker container ls -a | awk '/Exited/{print $NF}'` #echo "${container_list}"
} #启动容器
startup_container(){
echo -e "\n\e[35m待启动的容器id清单:\e[34m"
echo "${container_list}"
echo -e "\e[0m"
echo -e "\e[35m启动容器....................................\e[0m"
for i in ${container_list}
do
echo -e "\e[33m处理${i}容器。\e[0m"
if docker container start ${i} &>/dev/null;then
echo -e "\e[32m容器 ${i} 启动命令执行成功。\e[0m\n"
else
echo -e "\e[31m容器 ${i} 启动命令执行失败。\e[0m\n"
fi
done
} #检查容器是否运行正常
check_status(){
echo -e "\n\e[35m检测容器....................................\e[0m"
for i in ${container_list}
do
echo -e "\e[33m检查${i}容器。\e[0m"
docker_name=`docker container ls -a | grep -i ${i}|awk '{print $NF}'`
docker container ls | grep -i ${i} &>/dev/null
if [ $? -eq 0 ];then
echo -e "\e[32m容器 ${docker_name} 启动成功,id为:${i} \e[0m\n"
else
echo -e "\e[31m容器 ${docker_name} 启动失败,id为:${i} \e[0m\n"
fi
done
} #定义主函数
main(){
show_container_list
startup_container
echo -e "\e[33m等10秒再检测容器状态,如果10秒还存在则表示启动成功...................\e[0m"
sleep 10
check_status
} #调用主函数
main
结果

**************************************************************************************************************2021年3月18日脚本结束*****************************************************************************************************************
21年3月19日-容器停止脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
获取到当前系统中没有启动容器,批量启动docker容器。
文件说明
stop__rm_docker_container.sh:脚本主体文件
脚本主体
[root@135 52_stop__rm_docker_container]# cat stop__rm_docker_container.sh
#!/bin/bash
#展示系统中所有container,包括没有启动的
show_container_list(){
#获取当前系统中正在运行的容器。
#container_list=`docker container ls | awk 'NR>1{print $1}'`
container_list=`docker container ls | awk 'NR>1{print $NF}'` #echo "${container_list}"
} #启动容器
stop_container(){
echo -e "\n\e[35m待停止容器id清单:\e[34m"
echo "${container_list}"
echo -e "\e[0m"
echo -e "\e[35m停止容器....................................\e[0m"
for i in ${container_list}
do
echo -e "\e[33m处理${i}容器。\e[0m"
#手动让用户确认是否停止该容器
read -p "Please choose to stop or not container(default values n), y/n: " reply
answer_u=${reply:-n}
if [ ${answer_u} == "y" ];then
if docker container stop ${i} &>/dev/null;then
echo -e "\e[32m容器 ${i} 停止命令执行成功。\e[0m\n"
else
echo -e "\e[31m容器 ${i} 停止命令执行失败。\e[0m\n"
fi
else
echo -e "\e[33m不执行容器${i}停止操作。\e[0m\n"
fi
done
} #定义主函数
main(){
show_container_list
stop_container
} #调用主函数
main
结果

**************************************************************************************************************2021年3月19日脚本结束*****************************************************************************************************************
21年3月20日-日志输出装饰脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
定义shell脚本中日志各等级日志输入格式颜色。
文件说明
shell_decorator.sh:脚本主体文件
脚本主体
[root@135 53_shell_decorator]# cat shell_decorator.sh
#!/bin/bash
#表示有错误及退出
set -o errexit
set -o pipefail # 定义错误级别的输出格式为红色
log::err() {
printf "[$(date +'%Y-%m-%dT%H:%M:%S')]: \033[31mERROR: \033[0m$@\n"
} # 定义消息级别的输入格式为绿色
log::info() {
printf "[$(date +'%Y-%m-%dT%H:%M:%S')]: \033[32mINFO: \033[0m$@\n"
} # 定义告警等级的输入格式为黄色
log::warn() {
printf "[$(date +'%Y-%m-%dT%H:%M:%S')]: \033[33mWARNING: \033[0m$@\n"
} #定义主函数
main(){
log::info "This info level message"
log::warn "This warn level message"
log::err "This errorlevel message"
} #调用主函数
main
结果

**************************************************************************************************************2021年3月20日脚本结束*****************************************************************************************************************
21年3月21日-容器信息展示脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
获取系统中的容器信息,展示容器名、网络模式、使用文件大小、容器总大小。
文件说明
display_docker_info.sh:脚本主体文件
脚本主体
[root@135 54_docker_info]# cat display_docker_info.sh
#/bin/bash
#获取docker各个容器id,必须第一个执行
get_docker_id(){
#获取dockerid
docker_id=`docker container ls -q`
} #获取docker名及网络模式、文件大小、容器大小
get_docker_info(){
input_id=$1
docker_name=`docker ps | awk '/'$input_id'/{print $NF}'`
docker_network_type=`docker inspect $input_id -f {{.NetworkSettings.Networks}} | sed 's/map\[//g' | awk -F':' '{print $1}'`
docker_size=`docker ps -s| awk '/'$input_id'/{print $NF}' |sed 's/)//g'`
file_size=`docker ps -s| awk '/'$input_id'/{print $(NF-2)}'`
#echo -e "\e[34mDocker id $1 name : \e[33m ${docker_name:-null} \e[0m"
} #获取网络模式
get_docker_ip(){
input_id=$1
input_network=$2
case $2 in
"none")
docker_ip='127.0.0.1'
;;
"host")
docker_ip='Physical_machine_IP'
;;
"bridge")
docker_ip=`docker inspect ${input_id} -f {{.NetworkSettings.IPAddress}}`
;;
*)
docker_ip='unknown'
;;
esac
} #定义主函数
main(){
get_docker_id
echo -ne "\e[34m"
printf "%-20s %-25s %-20s %-15s %-15s %-15s\n" docker_id docker_name network_type file_size docker_size docker_ip
echo -ne "\e[m" for i in `echo $docker_id`
do
get_docker_info $i
get_docker_ip $i $docker_network_type
printf "%-20s %-25s %-20s %-15s %-15s %-15s\n" $i $docker_name $docker_network_type $file_size $docker_size $docker_ip
done
echo ""
} #调用主函数
main
结果

**************************************************************************************************************2021年3月21日脚本结束*****************************************************************************************************************
21年3月22日-多线程并发简易版脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
使用linux系统中的&参数模拟多线程输出。
文件说明
multithreading.sh:脚本主体文件
脚本主体
[root@135 55_multithreading]# cat multithreading.sh
#!/bin/bash
#定义一个函数输出数字函数1
echo_number_1(){
let a=0
while [ $a -lt 10 ]
do
echo -e "\e[31m 1111 \e[0m"
sleep 0.2
let a=$a+1
done
} #定义一个函数输出数字函数2
echo_number_2(){
let b=0
while [ $b -lt 10 ]
do
echo -e "\e[31m 2222 \e[0m"
sleep 0.2
let b=$b+1
done
} #定义一个函数输出数字函数3
echo_number_3(){
let c=0
while [ $c -lt 10 ]
do
echo -e "\e[31m 3333 \e[0m"
sleep 0.2
let c=$c+1
done
} #定义main函数
main(){
echo_number_1&
echo_number_2&
echo_number_3&
} #调用主函数
main
结果

**************************************************************************************************************2021年3月22日脚本结束*****************************************************************************************************************
60天shell脚本计划-11/12-渐入佳境的更多相关文章
- 60天shell脚本计划-12/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月23日 --修改时间:2021年3月27日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-8/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月3日 --修改时间:2021年3月7日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在评 ...
- 60天shell脚本计划-9/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月8日 --修改时间:2021年3月12日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在 ...
- 60天shell脚本计划-6/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月21日 --修改时间:2021年2月25日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-5/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月16日 --修改时间:2021年2月20日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-4/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月11日 --修改时间:2021年2月15日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-2/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月1日 --修改时间:2021年2月5日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在评 ...
- 60天shell脚本计划-1/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年1月27日 --修改时间:2021年2月1日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在 ...
- 60天shell脚本计划-10/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月13日 --修改时间:2021年3月17日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
随机推荐
- Web安全防护(二)
点击劫持 点击劫持,也称UI覆盖攻击 1.1 iframe覆盖攻击 黑客创建一个网页,用iframe包含了目标网站,并且把它隐藏起来.做一个伪装的页面或图片盖上去,且按钮与目标网站一致,诱导用户去点击 ...
- C++函数调用过程解析
编译环境:Windows 10 + VS2015. 0.引言 函数调用的过程实际上也就是一个中断的过程,本文演示和深入分析参数入栈.函数跳转.保护现场.恢复现场等函数调用过程. 首先对三个常用的寄存器 ...
- 「SDWC2018 Day1」网格
题目当中有三条限制,我们来逐一考虑.对于第一条限制,每次走动的增加量 \(x_i \le M_x, y_i \le M_y\),可以发现一共走的步数是确定的,那么就相当于解这样两个方程组: \[x_1 ...
- Tomcat 下载安装,启动,停止,注册服务,开机自启
感谢大佬:https://blog.csdn.net/wangmx1993328/article/details/81013715 目录 Tomcat 下载 startup.bat 启动 Tomcat ...
- MySQL数据类型的最优选择
MySQL数据类型的最优选择 慎重选择数据类型很重要.为啥哩?可以提高性能.原理如下: ● 存储(内存.磁盘).从而节省I/O(检索相同数据情况下) ● 计算.进而 ...
- 「游记」CSP-S 2021 爆零记
推荐访问本人自建博客 \(\text{cjwen.top}\) 初赛 之前参加过「难度介于 J 组(基础组)和 S 组(提高组)之间」的 [LGR-(-13) ]SCP 2021 第一轮(初赛)模拟, ...
- fiddler模拟弱网1
第一步: 首先你得将你的fiddle配置好了,并链接上了移动端. 参考 这篇文章:http://www.cnblogs.com/lijiageng/p/6214162.html 第二步: 使用 ...
- async异步流程控制
http://cnodejs.org/topic/54acfbb5ce87bace2444cbfb 先安装:G:\www\nodejs\one\models>npm install async ...
- 《PHP程序员面试笔试宝典》——如何处理与面试官持不同观点这个问题?
如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 在面试的过程中,求职者所持有的观点不可能与面试官一模一样,在对某个问题的看法上,很有可能两个人相去甚远.当与面试官持不同 ...
- WPF之复选MVVM TreeView(TreeView+CheckBox)
需求背景: 当我们用到权限菜单栏时权限菜单栏属于递归效果,我们需要用到TreeView+CheckBox进行组合复选开发时,我们需要解决此类问题时怎么办,那么就引出今天的小笔记内容 实现方式: 下载M ...