Articles of bash

脚本SSH到路由器和“启用”并运行命令

我有一个脚本,将ssh到路由器的列表,并运行command.txt commands.txt 。 我想在通过ssh连接到路由器之前enable我在ssh执行其余的commands.txt我有两个问题。 首先,我如何传递启用命令? 它似乎没有做任何事情,当我把它作为我的第一行在commands.txt. 第二,一旦我找出enable提示部分,我将如何通过我的凭据的脚本是全自动的? 脚本 commands.txt中 当我运行这个当前脚本时,当它提示我连接到路由器时input我的密码。 然后它只显示% Type "show ?" for a list of subcommands % Type "show ?" for a list of subcommands然后继续并连接到下一个路由器,并要求input我的凭据。

CentOS 6.5代理旁路/ no_proxy不能正常工作

我正在桌面上运行CentOS 6.5。 我已经使用Preferences下提供的networking代理应用程序设置了networking代理。 我还设置了以下例外:localhost,127.0.0.0 / 8,172.16.0.0 / 12,192.168.0.0。/ 16 但是,无论何时我使用wget(我使用wgettesting代理设置),然后wget尝试连接到代理的私人地址,但wget localhost工作正常,不使用代理。 我也删除了所有的代理设置,并在shell中设置代理: export http_proxy="<proxy_url>:<port>" export https_proxy="<proxy_url>:<port>" export no_proxy="localhost,127.0.0.0/8,172.16.0.0/12,192.168.0.0./16" 当我使用命令wget <external_url>或wget localhost时,它工作,但是当我使用wget <private address from the $no_proxy variable>的命令wget <private address from the $no_proxy variable>时失败。 我也尝试在Ubuntu 14.04中设置variables,并面临同样的问题。 编辑:我发现shell是忽略CIDR表示法。 如果我需要浏览127.0.0.1没有代理然后我需要input127.0.0.1在no_proxyvariables而不是127.0.0.0/8

testing何时使用rsync同步目录

有没有什么办法可以从一个bash脚本知道什么时候一个rsync命令不下载任何东西(即文件夹是同步的),我试过使用退出代码,但只有当错误发生时才会有所不同。 rsync的例子只下载不同步的文件: $ rsync -av –progress humbo @ hkremote:/ home / humbo / dumps / *。gz。 receiving file list … 9 files to consider _dump_7.gz 35927279 100% 1.19MB/s 0:00:28 (xfer#1, to-check=1/9) _dump_8.gz 39387704 100% 1.17MB/s 0:00:32 (xfer#2, to-check=0/9) sent 64 bytes received 75324472 bytes 1205192.58 bytes/sec total size is 354448073 speedup is 4.71 $ echo […]

'source .bash_profile'失败,但是'source path / to / .bash_profile'起作用

我正尝试在sudo-less用户的远程主机上获取我的.bashrc文件。 我正在收到以下回复。 sh-4.2$ source .bash_profile sh-4.2$ source: .bash_profile: file not found sh-4.2$ source ~/.bash_profile [user@hera ~]$ 这是为什么? 添加图像 .bash_profile的内容 .bashrc的内容 # .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # Uncomment the following line if you don't like systemctl's auto-paging feature: # export SYSTEMD_PAGER= # User specific aliases and […]

有没有办法logging所有bash显示的文本(包括input和输出)?

在标题中,我想logging所有显示的bash,即input和相关输出。 比方说,我想要一个“历史”的一切,而不仅仅是input命令。 我希望将日志存储在不同的文件中,例如每个会话有一个文件(从shell的打开到终止)。 有任何想法吗?

评价bash中的反引号

我对bash中反引号的评价感到困惑。 我以前看过这样的代码是有道理的: RESULT=`whoami` 这将whoami命令的输出存储在RESULTvariables中,并确认反引号计算到其中的命令的输出 。 但是我也看到如下代码: if `wget google.com -T 2 -t 1 -o /dev/null`; then echo "Internet ok" fi 这是testing互联网连接通过试图获得谷歌的主页(一个单一的尝试-t 1 , -T 2的2秒超时,并redirect到/dev/null因为它实际上并不需要输出,而只是想看看是否成功)。 该代码读取,就好像作者期望反引号将评估wget命令的退出代码而不是输出。 但它实际上工作。 它打印Internet ok如果它可以连接到google.com,如果我改变了一些废话url不存在,它不满足if语句和打印什么。 我不明白为什么这个工作。 独立运行带有效和无效URL的wget命令在这两种情况下都不会打印任何内容,只有退出代码才会有所不同。 我的结论是,有一个特殊的结构, if后面的反引号返回退出代码,而不是输出。 我错了吗?

从bash中select远程数据库

我是一种新的bash / shell脚本,我试图远程从MySQL数据库中select,并检查是否存在logging或不。 基于回应会做一些东西。 这是我作为一个命令 mysql -u mysql -pMysql123 -h xxx.xxx.xxx.xxx MYDBNAME -e "select count(column) from TABLE where column=1234;" 当我在terminal直接运行这个命令时,我得到了正确的回应。 所以我试图把它放在这样的脚本 #!/bin/bash count=mysql -u mysql -pMysql123 -h xxx.xxx.xxx.xxx MYDBNAME -e "select count(column) from TABLE where column=1234;" if [ $count -gt 0 ] then echo " greater that 0 " else echo " lower than 0 […]

简单的bash脚本来检查隧道是否存在

我想写一个简单的bash脚本的cronjob来检查是否有一些接口(隧道)exsisting。 如果不是,我想开始另一个脚本,(重新)启动它们。 我的问题是:我没有得到“IF”的工作: #bin/bash for i in tun1 tun2 tun3 tun3 tun4 tun5 do OUT="$(ip a show $i up)"; if [[ $OUT == *"does not exist."* ]]; then echo "$i is down" else echo "$i is up" fi done 当前输出是: ./check_tunnel.sh tun1已启动 tun2已启动 tun3已经启动了 tun3已经启动了 tun4已经结束 设备“tun5”不存在。 tun5已经结束了

如何确保在bash会话中为用户设置环境variables?

如何确保为用户设置了一个环境variables? 我有 MYVAR=whatever export MYVAR 在〜/ .bash_profile中,但来自用户的报告表明它没有为他们工作。 发生什么事了?

保护bash脚本

有谁知道什么是保护bash脚本的最佳方法。 我有一个脚本,创build数据库和源代码备份,并将其ftp到其他服务器。 目标ftp的login名/密码是纯文本。 我需要以某种方式encryption或隐藏网站黑客的情况下。 或者我应该创build脚本写在C创buildbash文件然后运行它并删除? 谢谢。 谢谢你的回答,我很抱歉,我还不够清楚。 我想在以下几个方面澄清我的问题。 我们正在将数据存储在Rackspace Cloud文件中。 我们不能拉,因为云文件不允许您运行脚本。 我们可以编写脚本在服务器A上运行,并在服务器B,C,D等上拉取FTP和MySQL数据。我们希望保护A上的密码免受A被入侵的情况的影响。 我们可以编译我们的脚本文件来隐藏它们吗? 谢谢