Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
【Linux】While循环吃hang行了?(图是一个毒)_创想鸟

【Linux】While循环吃hang行了?(图是一个毒)

最近被一首歌曲洗脑了:心火烧,原名《情伴》,作为新中国的第一首流行歌曲,绝对是神曲的开山祖师呀,而在《向往的生活》中被宋丹丹老师、黄磊老师等演绎后,每天忍不住哼唱?

【Linux】While循环吃hang行了?(图是一个毒)进入正题

这两天因为测试准备了一个脚本,流程就是类似需要登录各个服务器然后执行命令,从设计上看感觉非常简单:

将各服务器的IP全部写入到一个文件,while循环读取每一行的IP,通过ssh登录并执行命令后继续下一个,最初的设想代码如下:

初始代码

#!/bin/bash -f

if [ -z $1 ];then

{

echo “ERROR: missing IP File.”;echo;exit

}

elif [ ! -f $1 ];then

{

echo;echo “File “$1″ does not exist!”;echo;exit;

}

else

{

while read ip;do

{

regex=”sb(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])bs“

is_ip=echo $ip | egrep $regex | wc -l

if [ $is_ip -eq 0 ]

then

{

echo “The “$ip” is not a valid IP address!”;continue

}

else

{

ssh coreuser@$ip “hostname”

}

fi

}

done < $1

}

fi

{感觉自己棒棒哒}

调集几个服务器(其实就一个服务器,多进行几次罢了——机智如我^_^)来试一试,结果为什么不只执行一次,我有三个IP呀(震惊了我的双眼):

【Linux】While循环吃hang行了?(图是一个毒)Test

将循环体的ssh加入了-t的参数来制造一个伪终端来显示一下登录的执行过程,如下:

ssh -t coreuser@$ip “hostname”

运行脚本之后结果如下:

【Linux】While循环吃hang行了?(图是一个毒)咦~好像读取了文件中的内容呀~但是为什么不是ssh各个IP呢?却类似将各个IP在远端服务器中执行了呢?

然后经过反复百度google终于找到了一个帖子,解释如下:

因为重定向是针对整个while循环块的,而不只是read命令,read从输入读取了一行内容后,其它的程序(比如 rsh或sed)从同样的地方把其它的输入读走了,read当然读不到其它内容了,while也就结束了

解决方法

通过exec修改文件描述符来完美解决,添加如下代码块:

exec 3<&0 <$1

while read ip <&3

do

….

done

exec 3>&-

最终方案

果然修改之后的代码运行结果完美切合自己所想:

【Linux】While循环吃hang行了?(图是一个毒)修改后的代码

#!/bin/bash -f

if [ -z $1 ];then

{

echo “ERROR: missing IP File.”;echo;exit

}

elif [ ! -f $1 ];then

{

echo;echo “File “$1″ does not exist!”;echo;exit;

}

else

{

exec 3<&0 <$1

while read ip <&3

do

regex=”sb(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])bs“

is_ip=echo $ip | egrep $regex | wc -l

if [ $is_ip -eq 0 ]

then

{

echo “The “$ip” is not a valid IP address!”;continue

}

else

{

ssh coreuser@$ip “hostname”

}

fi

done

exec 3>&-

}

fi

应用

那么问题来了?这个到底有什么用呢?这个对于运营维护随便写一个shell可以有很大的作用,比如我的这个ssh,就可以将所有的相同类型服务器作为一个组,然后循环对服务器进行检查等操作。在集群和现在云中的多VM中应该比较常见吧?(没做过不是很懂,当然对运维来说使用python等语言更加容易,但是python可能需要对应的module,没这个shell来的快和方便呀)。

哪些命令具有吃行的本领呢?

ssh、sed,额~

以上就是【Linux】While循环吃hang行了?(图是一个毒)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/25504.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
绝区零奥菲丝&鬼火突破材料汇总
上一篇 2026年9月22日 13:23:26
CSS Viewport: 使用 vh 和 vmax 创建自适应屏幕高度的方法
下一篇 2025年12月24日 09:37:03

相关推荐

  • 抖音飞鸽客服名称怎么改?抖店客服名称怎么改

    电商行业在我国经济中的地位日益凸显。为了满足消费者日益增长的服务需求,各大电商平台纷纷推出特色客服服务。抖音飞鸽客服作为抖音平台的官方客服,以其独特的服务模式和创新精神,赢得了广大用户的认可和好评。本文将从抖音飞鸽客服的名称改写、服务特色、行业影响等方面进行分析,以期为电商客服行业的发展提供借鉴。 …

    2026年9月22日
    000
  • Krita中如何导出AI生成的分层图片?保存多层图像的步骤

    .kra格式是保存AI分层图像的最佳选择,因其完整保留Krita特有的图层、蒙版、滤镜等编辑信息,确保后续修改不受限;若需跨软件协作,则应导出为PSD格式,尽管可能损失部分Krita专属功能,但兼容性最广;TIFF适合高质量印刷场景,但分层支持不稳定;OpenEXR适用于含深度、法线等通道的专业合成…

    2026年9月22日
    100
  • mysql怎么执行sql命令 mysql输入代码创建表详细步骤

    mysql怎么执行sql命令 mysql输入代码创建表详细步骤mysql怎么执行sql命令 mysql输入代码创建表详细步骤mysql怎么执行sql命令 mysql输入代码创建表详细步骤mysql怎么执行sql命令 mysql输入代码创建表详细步骤

    在mysql中执行sql并创建表的步骤如下:1.通过命令行或图形工具连接数据库,使用mysql -u 用户名 -p并输入密码登录;2.选择或创建数据库,用use database_name或create database语句;3.使用create table定义表结构,如字段名、数据类型、约束等,例…

    2026年9月22日 • 用户投稿
    100
  • LINUX怎么查看命令历史记录_Linux查看与清除历史命令的方法

    使用history命令查看历史记录,可通过history | grep搜索或上下箭头浏览,记录保存在~/.bash_history文件中;通过export HISTSIZE和HISTFILESIZE修改保存数量,并写入~/.bashrc永久生效;用history -c清空当前会话,> ~/.b…

    2026年9月22日
    000
  • 使用php连接mssql实现日志记录_通过php连接mssql完成日志管理

    使用PHP连接MSSQL可实现高效日志管理,首先需安装sqlsrv扩展并配置php.ini;接着通过sqlsrv_connect建立数据库连接,确保SQL Server启用TCP/IP协议;然后创建包含LogLevel、Message、Source等字段的AppLogs表;封装writeLog函数插…

    2026年9月22日
    000
  • VSCode 怎样自定义代码运行的动画效果 VSCode 代码运行动画效果的自定义方法​

    vscode本身不支持电影特效式的自定义代码运行动画,其核心设计注重功能与效率;2. 实现更生动的视觉反馈主要依赖内置机制和扩展:状态栏指示器、输出面板滚动、调试高亮等是默认反馈方式;3. 可通过安装测试运行器扩展(如jest runner、python test explorer)实现测试进度条、…

    2026年9月22日
    000
  • Swift 3到5.1新特性整理

    tocSwift 5.1Swift 5.0Result类型Raw string自定义字符串插值动态可调用类型处理未来的枚举值从try?抹平嵌套可选检查整数是否为偶数字典compactMapValues()方法撤回的功能: 带条件的计数Swift 4.2CaseIterable协议警告和错误指令动态查…

    2026年9月22日
    000
  • MySQL安装后初始密码在哪里查看?

    MySQL安装后初始密码在哪里查看?MySQL安装后初始密码在哪里查看?MySQL安装后初始密码在哪里查看?MySQL安装后初始密码在哪里查看?

    mysql安装后的初始密码取决于安装方式和操作系统,通常可在错误日志中找到。1. 查看mysql错误日志:linux系统使用grep命令查找/var/log/mysqld.log或类似路径;windows系统在data目录下的hostname.err中搜索“temporary password”。2…

    2026年9月22日 • 用户投稿
    100
  • mysql如何添加主键索引 mysql创建主键索引的步骤详解

    mysql如何添加主键索引 mysql创建主键索引的步骤详解mysql如何添加主键索引 mysql创建主键索引的步骤详解mysql如何添加主键索引 mysql创建主键索引的步骤详解mysql如何添加主键索引 mysql创建主键索引的步骤详解

    mysql中添加主键索引主要有三种方式:1. 创建新表时直接添加主键,可在列定义后使用primary key或在所有列定义后单独声明;2. 在已有表上通过alter table添加主键,需确保目标列非空且唯一,必要时先清洗数据;3. 添加复合主键,适用于多列组合才能唯一标识记录的情况。主键索引在in…

    2026年9月22日 • 用户投稿
    000
  • Winscp连接本地linux(centos7)

    要在本地linux系统(例如centos7)中查找ip地址,可以使用以下命令: ip addr show 或者更简洁的: ip a 这两个命令都会显示系统中所有网络接口的详细信息,包括IP地址。 如果你只想查看IPv4地址,可以使用以下命令: ip -4 addr show 或者使用ifconfig…

    2026年9月22日
    000
  • VSCode 如何配置 Python 虚拟环境 VSCode 配置 Python 虚拟环境的步骤​

    VSCode 如何配置 Python 虚拟环境 VSCode 配置 Python 虚拟环境的步骤​VSCode 如何配置 Python 虚拟环境 VSCode 配置 Python 虚拟环境的步骤​VSCode 如何配置 Python 虚拟环境 VSCode 配置 Python 虚拟环境的步骤​VSCode 如何配置 Python 虚拟环境 VSCode 配置 Python 虚拟环境的步骤​

    在vscode中配置python虚拟环境的核心是选择正确的解释器,确保项目依赖隔离;2. 首先在项目根目录使用python -m venv .venv创建虚拟环境,或使用conda、pipenv等工具;3. 在vscode中打开项目文件夹,通过ctrl+shift+p输入“python: selec…

    2026年9月22日 • 用户投稿
    100
  • 百家号发文章在哪里发?百家号的文章都发到哪里去了

    百家号作为一个集内容创作、阅读与互动为一体的平台,吸引了大量创作者加入。如何在该平台上发布一篇高质量的内容,从而吸引更多读者关注,是众多创作者关心的话题。本文将围绕关键词规划、内容撰写以及发布策略等方面,提供一份详细的百家号内容发布指南,帮助你在百家号上展现风采。 一、关键词布局 1. 确定核心关键…

    2026年9月22日
    300
  • MySQL最新版本如何下载?官方下载指南

    MySQL最新版本如何下载?官方下载指南MySQL最新版本如何下载?官方下载指南MySQL最新版本如何下载?官方下载指南MySQL最新版本如何下载?官方下载指南

    要下载mysql,推荐从官网直接下载;选择社区版或商业版取决于用途;下载时需选对操作系统和版本;安装遇到问题可查错误提示并搜索解决方案;验证安装成功可用命令行登录。下载步骤包括访问官网、选择版本与操作系统、使用installer、注册账号、开始下载安装。安装后配置root密码、字符集等。验证方式为命…

    2026年9月22日 • 用户投稿
    100
  • VSCode如何集成RabbitMQ管理工具 VSCode消息队列插件的使用指南

    vscode可通过安装benoit zuger开发的rabbitmq插件实现对rabbitmq的连接、消息查看、队列管理等操作;2. 使用步骤包括安装插件、添加连接、配置name、host、port、username、password和vhost参数;3. 连接成功后可在vscode内查看队列、发布…

    2026年9月22日
    000
  • 百家号发文章有字数要求吗?百家号文章最少多少字

    数字时代已经来临。百家号作为一款内容创作平台,成为了众多创作者展示才华、传播思想的舞台。百家号对于文章的字数要求,成为了许多创作者关注的焦点。本文将围绕百家号文章的字数要求,探讨其背后的原因、影响及应对策略。 一、百家号文章字数要求的原因 1. 提升内容质量 百家号对文章字数的要求,旨在提升内容质量…

    2026年9月22日
    100
  • 百家号发文章有收益吗?发文章赚钱最快的平台

    随着内容创作平台的不断增多,百家号作为其中的重要一员,凭借其庞大的用户基础和多元化的变现方式,吸引了众多创作者加入。那么,在百家号上发文章真的能带来收益吗?本文将带您深入了解百家号发文的盈利机制。 一、百家号概述 百家号是百度推出的内容发布平台,全称“百度百家号”,致力于打造一个高品质、多样化的内容…

    2026年9月22日
    100
  • VSCode配合Vivado进行FPGA图像处理(算法加速与优化)

    答案:VSCode与Vivado结合可提升FPGA图像处理开发效率,前者用于代码编辑、版本控制和远程开发,后者负责综合、实现与调试,二者协同实现高效算法优化。 将VSCode与Vivado结合用于FPGA图像处理,本质上是利用VSCode作为高效的代码编辑、版本控制和辅助开发环境,来弥补Vivado…

    2026年9月22日
    200
  • 构建VSCode多媒体编程界面与实时音视频处理

    答案:VSCode通过配置Node.js、Python扩展及FFmpeg等工具,结合OpenCV、PyAudio等框架,可构建高效音视频处理环境。1. 安装Python和Node.js支持,启用Pylance、Jupyter插件提升数据处理体验;2. 配置终端与Code Runner实现脚本一键执行…

    2026年9月22日
    100
  • linux系统下codeblocks控制台打印中文乱码[通俗易懂]

    linux系统下codeblocks控制台打印中文乱码[通俗易懂]linux系统下codeblocks控制台打印中文乱码[通俗易懂]linux系统下codeblocks控制台打印中文乱码[通俗易懂]linux系统下codeblocks控制台打印中文乱码[通俗易懂]

    大家好,很高兴再次和大家见面,我是你们的朋友全栈君。 在Linux系统下使用CodeBlocks时,如果在控制台中打印中文可能会遇到乱码问题。以下是解决这一问题的详细步骤: 首先,我们来看一下在Linux系统下安装CodeBlocks后,运行以下代码时出现的问题: #include #include…

    2026年9月22日 • 用户投稿
    600
  • 百度地图导航语音无法关闭怎么办 百度地图语音设置调整技巧

    首先要分清关闭的是导航语音播报还是语音唤醒功能。①关闭导航语音:打开百度地图→【我的】→【设置】→【导航设置】→【导航中语音】→选择【静音】。②关闭语音唤醒:进入【我的】→【设置】→【语音设置】→【智能语音】→关闭【说“小度小度”唤醒】开关。操作后仍无效可尝试更新App或重新登录账号。 百度地图导航…

    2026年9月22日
    000

发表回复

登录后才能评论
关注微信