今天在将windows下的脚本文件通过scp命令,发送到远程服务器上,在执行过程中遇得到了这个问题 ./sh.sh -bash: ..../sh.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录 原因分析:windows下,每一行的结尾是\n\r,而在linux下文件的结尾是\n,那么在windows下编辑过的文件在linux...下打开看的时候每一行的结尾就会多出来一个字符\r,用cat -A urfile时你可以看到这个\r字符被显示为^M,这时候只需要删除这个字符就可以了,可以使用命令 sed -i 's/\r//' filename.../bin/bash^M$ # ^M$ ^M$ echo "Hello World"^M$ sed -i 's/\r//' sh.sh ./sh.sh Hello World 你好
在windows使用WSL后,安装了Ubuntu操作系统,在Ubuntu系统中执行npm时候提示如下: 解决办法: 使用vi 或者 vim命令打开文件 可以看到 按一下ESC 输入 :set ff
今天在翻看以前写的简单的shell脚本时,发现一个问题: 当./运行时总是提示: (bash: ..../hello.sh: bin/bash: 坏的解释器: 没有那个文件或目录),但是当用sh运行时正确. 原来的脚本: (试试看你能否一眼看出错误) #!...bin/bash echo "Hello Linux!" 后来几番检查发现自己写的丢了一些东西. 应该把红体字改成 #!/bin/bash (!后面少了/)
/file_name或source命令执行脚本 这种方式不会像前两种方式一样fork一个子进程去执行脚本,而是使用当前shell环境执行,用于 .bashrc或者.bash_profile被修改的时候,...在文件中存在Shebang的情况下,类Unix操作系统的程序载入器会分析Shebang后的内容,将这些内容作为解释器指令,并调用该指令,并将载有Shebang的文件路径作为该解释器的参数。...编辑bash_profile文件。 bash_profile文件 我们编辑bash_profile文件,此文件会在终端窗口创建的时候首先执行一次,所以可以帮我们再设置一次别名; 执行命令vim ~..../bash_profile或source ~..../bash_profile 在当前脚本执行一遍设置别名命令,完成设置; 这样,我们无论在哪个目录,只要输入alias_name命令,回车,真正的一键登陆!
目录 linux文件搬运 目的 过程简介 准备工作: 流程介绍: 实践方法 免密协议搭建: 1.建立A、B服务器的公钥私钥 2.建立A、B服务器的免密: 免密详细流程说明: 编写搬运脚本(三种方式):...服务器间的数据、文件搬运和免密登录等问题; 从多种业务环境入手,以不同方式实现服务器间的文件传输; 过程简介 准备工作: 1.保证服务器之间的正常通信(可以ping通),ping不同一般出现在服务器处于不同网段或防火墙未关闭...2.编写搬运shell脚本(.sh); 将我们需要传输的相关命令写入脚本,附上权限方便手动或定时器调用。...3.编辑linux自带定时器(crontab); 通过linux定时器触发,去调用shell搬运脚本进行日常搬运工作。...(实际项目操作中2000个txt文件就会删除失败,抛出list too much)会删除失败;SO,我们使用了半年的搬运程序是存在很大问题的,赶紧处理—> 升级后的程序: 引入了linux中的rsync
注意: (1)该脚本没有使用spawn命令。 (2)该expect脚本会与任何调用该脚本的进程交互。 (3)如果该脚本名为prompt,那么它可以用在任何C风格的shell中。...“-b”选项可以让expect一次只读取脚本中的一行。当你没有写完整个脚本的时候,这是十分有用的,expect可以开始执行这个不完整的脚本,并且,它可以避免把脚本写入到临时文件中。...,在其中调用另外一个expect脚本(scp_key_to_node.exp),两个脚本放在同一个目录下: (1)bash脚本:send_key.sh #!...0]表示脚本的第0个参数 expect eof表示读取到文件结束符 (4)脚本执行方式: 在脚本所在的目录下执行: # ....代码结尾的expect eof与spawn对应,表示捕获终端输出信息的终止。 如果需要实现批量scp的任务,则需要再写一个shell脚本来调用这个expect脚本。 #!
文章目录 1. shell 概述 1.1 shell 和 shell 脚本 1.2 Shell 脚本应用场景 1.3 Linux 中的 shell 类型 1.4 脚本实例 2. shell 脚本编程基础...shell 中内置的变量,在脚本代码中调用通过命令行传递给脚本的参数。...可以将经常使用的函数存入一个单独的函数文件,然后将函数文件载入 shell,再进行调用函数 文件名可任意选取,但最好与相关任务有某种联系,例如:functions 一旦函数文件载入 shell,就可以在命令行或脚本中调用函数...可以使用 delcare -f 或 set 命令查看所有定义的函数,其输出列表包括已经载入 shell 的所有函数 若要改动函数,首先用 unset 命令从 shell 中删除函数,改动完毕后,再重新载入此文件...实现函数文件的过程: 创建函数文件,只存放函数的定义 在 shell 脚本或交互式 shell 中调用函数文件,格式如下: . filename 或 source filename 示例: [root
这意味着如果bash以rbash启动,或者使用-r选项调用,那么这个shell将被限制。.../etc 目录没有任何限制。...2、perl 同样的,你可以选择perl如以下命令,生成合适的sh shell 而不是rbash,如下所示我们可以访问/etc 目录没有任何限制。 ?...考虑一种情况,你在当前的目录下有一个日志文件名为ignite.txt,你允许一部分的命令来读取这个日志文件例如more或less。...(这张图作者应该是贴错了) 五、使用expect程序绕过rbash Expect是一个unix下的程序,它可以根据脚本与其他程序交互来进行对话,在脚本之后,Expect知道程序期待什么,然后给它正确的回复
系统的回应和输出的信息也由shell处理,然后显示在用户的屏幕上什么是shell脚本 ?...简单的说,当命令或者程序不在命令行执行,而是通过一个程序文件来执行,这个程序就被称为shell脚本 也就是在shell脚本里内置了多条命令,语句,循环控制,然后将这些命令一次性执行完毕,这种通过文件执行命令的方式称为非交互式...dev/null; then echo "--> $FILE" fi done 十四、给定目录找出包含关键字的文件 #!...echo "--> $FILE" fi done 十五、监控目录,将新创建的文件名追加到日志中 场景:记录目录下文件操作 需先安装inotify-tools软件包 #!...break fi done done 二十一、从FTP服务器下载文件 #!
/bin/bash # 一键部署 LNMP(RPM 包版本) # 使用 yum 安装部署 LNMP,需要提前配置好 yum 源,否则该脚本会失败 # 本脚本使用于 centos7.2 或 RHEL7.2.../bin/bash # 根据 md5 校验码,检测文件是否被修改 # 本示例脚本检测的是/etc 目录下所有的 conf 结尾的文件,根据实际情况,您可以修改为其他目录或文件 # 本脚本在目标数据没有被修改时执行一次.../bin/bash # 使用脚本开启关闭虚拟机 # 脚本通过调用virsh命令实现对虚拟机的管理,如果没有该命令,需要安装 libvirt‐client 软件包 # $1是脚本的第1个参数,$2.../bin/bash # 调整虚拟机内存参数的 shell 脚本 # 脚本通过调用 virsh 命令实现对虚拟机的管理,如果没有该命令,需要安装 libvirt‐client 软件包 cat bash # Shell 脚本对信号的处理,执行脚本后,按键盘 Ctrl+C 无法终止的脚本 # 使用 trap 命令可以拦截用户通过键盘或 kill 命令发送过来的信号 # 使用 kill
****前言**** 记得在去年在蝴蝶脚本已经看到过expect,只不过没有去留意它是什么,是干什么的,然而今天去了解了,并利用它来写自动化交互脚本。...在服务器开发中,有时候需要同步文件(scp),远程服务器(ssh)等等,难免要进行密码的检验,这就麻烦了,不过认识expect就有解决方案啦,那么我们来认识一下吧~~~ ---- ****expect简介...换句话说就是这些命令和程序是期望从终端得到输入,一般来说这些输入都需要手工输入进行的。 expect可以根据程序的提示模拟标准输入提供给程序需要的输入来实现交互程序执行。...interact send:用于向进程发送字符串 expect: 期望从进程接收到的字符串,后面也可以跟正则表达式 spawn:启动进程 set timeout -1 :脚本运行超时(秒) -1不会超时...---- ****与bash共用**** 从上面可以看出第一行已经指定了脚本的解析器,但是很多时候或场景我们只希望expect作为shell脚本的一个小小的调用部分,然而使可以的,这也是最常用的。
shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。...shell脚本中最重要的就是对shell命令的使用与组合,再使用shell脚本支持的一些语言特性,完成想要的功能。.../bin/bash #使用 yum 安装部署 LNMP,需要提前配置好 yum 源,否则该脚本会失败 #本脚本使用于 centos7.2 或 RHEL7.2 yum ‐y install httpd yum...,提示用户猜数字,根据用户的输入,提示用户猜对了, 猜小了或猜大了,直至用户猜对脚本结束。.../bin/bash read ‐p "请输入用户名: " user #使用‐z 可以判断一个变量是否为空,如果为空,提示用户必须输入账户名,并退出脚本,退出码为 2 #没有输入用户名脚本退出后,
20.31 expect脚本同步文件 expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 #!...20.32 expect脚本指定host和要同步的文件 expect脚本指定host和要同步的文件 set timeout 定义超时时间(单位为 秒) -1 为永远不超时 指定host和要同步的文件 #...所以,自动同步文件是至关重要的。 实现思路 首先要有一台模板机器,把要分发的文件准备好,然后只要使用expect脚本批量把需要同步的文件分发到目标机器即可。...核心命令 rsync -av --files-from=list.txt / root@host:/ 使用rsync 的 --files参数,可以实现调用文件里面的列表,进行多个文件远程传输,进而实现文件分发...分发系统还有一个重要的关键是,确保同步的机器的密码一致,否则将不能实现同步;所以这就存在一个弊端,一旦脚本暴露,将会让别人知道如何登陆你机器;当然也有对应的解决办法,那就是使用密钥认证,这样的话
分发系统介绍 ---- 所谓分发系统就是一个主要用来上线代码或同步文件的脚本,先来看一下需求背景: 我们的一个网站在很多台服务器上跑着,假设这个网站的后端是使用PHP编写的,那么当这个后端的PHP代码需要更新或扩展的时候...我们现在要做的就是实现这个分发系统,实现这个系统需要用到两个主要的东西就是shell和expect,通过shell结合expect可以编写一个简单的分发系统。...test.sh /tmp/test.txt /root/expectFiles/hostFile.expect 提示:如果你的rsync命令没有加-R选项的话,就需要确保目标机器也有这个文件列表中所定义的目录路径...4.再编写一个shell脚本rsync.sh,这个脚本比较简单,只是遍历出ip.list文件内容然后交给rsync.expect脚本去执行而已,示例: [root@localhost ~/expectFiles...,文件也正常同步了,这样我们就实现了一个很简单的文件分发系统。
注意 expect 脚本能够执行需要提前安装 expect,一般系统默认没有此命令。...如果值非零或按下^C(或击中断点,或脚本中出现其他适当的调试器命令),调试器将在下一个 Tcl(Tool Command Language) 过程之前接管控制。...-i 交互式输入 expect 命令,而不是从文件中读取。通过 exit 命令或 EOF 终止。 -n 不使用 ~/.expect.rc 脚本。...命令按照它们出现的顺序执行。 -f 从文件读取命令,仅用于使用#!时。如果文件名为"-",则从stdin读取(使用"./-"从文件名为-的文件读取)。...-b 默认情况下,命令文件被读入内存并完整地执行。有时需要一次读取一行。例如,stdin 是这样读取的。为了强制任意文件以这种方式处理,请使用 -b 选项。 -v 显示 expect 版本信息。
构建文件分发系统 3.1 编写登录远程服务器执行命令的脚本 3.2 定义远程登录服务器的一个list 3.3 定义同步的列表 3.4 创建一个shell脚本 3.5 测试结果 4....但当不能使用密钥验证的时候,我们就没有办法了。所以,这时只知道对方机器的账号和密码可以通过expect脚本实现登录和远程命令。.../usr/bin/expect 这一行告诉操作系统脚本里的代码使用那一个shell来执行。...在这里eof是必须去匹配的,在spawn进程结束后会向expect发送eof,如果expect没有匹配,那么会立即退出远程登录,即操作失败。...核心命令:rsync -av --files-from=list.txt / root@host:/ 注意:这里的都是根目录(使用rsync 的 --files参数,可以实现调用文件里面的列表,进行多个文件远程传输
shell脚本是帮助程序员和系统管理员完成费时费力的枯燥工作的利器,是与计算机交互并管理文件和系统操作的有效方式。区区几行代码,就可以让计算机接近按照你的意图行事。...民工哥为大家整理了100个实例,通过100个实战经典脚本实例,展示了shell脚本编程的实用技术和常见工具用法。...在此之前,也给大家分享过:shell脚本编程最佳实践,本文的脚本文件民工哥也给大家整理成了 PDF 文档(知道大家喜欢电子版),具体获取方式见文末。 1、检测两台服务器指定目录下的文件一致性 #!...点时,将目标目录下的所有文件内#容清空,但不删除文件,其他时间则只统计各个文件的大小,一个文件一行,输出到以时#间和日期命名的文件中,需要考虑目标目录下二级、三级等子目录的文件 ############.../bin/bash # 脚本生成一个 100 以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了, # 猜小了或猜大了,直至用户猜对脚本结束。
这意味着,当前目录的 node_modules/.bin 子目录里面的所有脚本,都可以直接用脚本名调用,而不必加上路径。...调用项目内部安装的模块 一般来说,调用 Mocha ,只能在项目脚本和 package.json 的 scripts 字段里面, 如果想在命令行下调用,必须像下面这样。...后面就是脚本解释器的位置,Bash 脚本的解释器一般是/bin/sh或/bin/bash。 #!/bin/sh # 或者 #!/bin/bash #!与脚本解释器之间有没有空格,都是可以的。...如果将脚本放在环境变量$PATH指定的目录中,就不需要指定路径了。因为 Bash 会自动到这些目录中,寻找是否存在同名的可执行文件。...错误处理 如果脚本里面有运行失败的命令(返回值非0),Bash 默认会继续执行后面的命令(只是显示有错误,并没有终止执行)。 这种行为很不利于脚本安全和除错。
每一个合格的Linux系统管理员或运维工程师,都需要熟练的编写Shell脚本,并能够阅读系统及各类软件附带的Shell脚本内容。...只有这样才能提升运维人员的工作效率,适应日益复杂的工作环境,减少不必要的重复工作,从而为个人的职场发展奠定较好的基础。 本篇文档整理了来自网络的109个shell脚本,希望对大家有所帮助。...12.把当前目录(包含子目录)下所有后缀为".sh"的文件后缀变更为".shell",之后删除每个文件的第二行。...16.将当前目录下大于10K的文件转移到/tmp 目录,再按照文件大小顺序,从大到小输出文件名。...{#}和{@}其次使用了字符串截取的操作 56.本地expect登陆拷贝scp exec.sh脚本 57.检测两台服务器指定目录下的文件—致性 58.定时清空文件内容,定时记录文件大小 59.检测网卡流量
/bin/bash# 一键部署 LNMP(RPM 包版本)# 使用 yum 安装部署 LNMP,需要提前配置好 yum 源,否则该脚本会失败# 本脚本使用于 centos7.2 或 RHEL7.2yum.../bin/bash# 根据 md5 校验码,检测文件是否被修改 # 本示例脚本检测的是/etc 目录下所有的 conf 结尾的文件,根据实际情况,您可以修改为其他目录或文件# 本脚本在目标数据没有被修改时执行一次.../bin/bash# 使用脚本开启关闭虚拟机 # 脚本通过调用virsh命令实现对虚拟机的管理,如果没有该命令,需要安装 libvirt‐client 软件包# $1是脚本的第1个参数,$2是脚本的第2.../bin/bash# 调整虚拟机内存参数的 shell 脚本 # 脚本通过调用 virsh 命令实现对虚拟机的管理,如果没有该命令,需要安装 libvirt‐client 软件包cat bash# Shell 脚本对信号的处理,执行脚本后,按键盘 Ctrl+C 无法终止的脚本 # 使用 trap 命令可以拦截用户通过键盘或 kill 命令发送过来的信号# 使用 kill ‐l
领取专属 10元无门槛券
手把手带您无忧上云