标签: scripting

通过 ssh 远程更改 IP

我正在使用 CentOS。

我有一个管理服务器,它可以通过无密码 ssh 访问其他四台服务器。我无法物理访问这些服务器。换句话说,我必须通过 ssh 进行所有配置。

我想在管理服务器上创建一个 bash 脚本来更改其他服务器的 IP 地址,但是如果我提供了错误的 IP(例如网络中使用的 IP),管理服务器将无法访问其他服务器。

我能做些什么来防止或减轻这个问题?

networking scripting ssh

2
推荐指数
1
解决办法
2717
查看次数

将 3 行 bash 脚本拆分为一行

以下是我在谷歌搜索后发现的:

dpkg --list 'linux-image-*' \
    | perl -ane 'BEGIN { $r = `uname -r` or die; chomp $r } print $F[1], "\n" if $F[0] eq "ii" && $F[1] !~ /\Q$r\E\b/' \
    | xargs -r aptitude purge -y
Run Code Online (Sandbox Code Playgroud)

有人可以将上述 3 行合二为一吗?我发现将一行复制并粘贴到 sudo 命令中比三行更容易,一次一行。

对于 Hauke Laging:当我尝试按照 sudo 命令一次复制三个分割线时,我编辑了这篇原始帖子以包含错误消息:

username@hostname:~$ sudo -i
[sudo] password for username: 
root@hostname:~# dpkg --list 'linux-image-*' \
> 
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-=================================
un  linux-image-2. <none>                    (no description available) …
Run Code Online (Sandbox Code Playgroud)

scripting bash

2
推荐指数
2
解决办法
655
查看次数

仅当该行还不是文件的一部分时才在文件中插入一行

我正在搜索创建一个脚本来自动将一些自定义配置应用于基于文本的配置文件。

在本例中,/etc/sysctl.conf如果这些行尚未在文件中,我正在搜索添加 2 行(以避免在文件中多次出现这些行)。

这是我使用的脚本:

if [ `grep vm.swappiness /etc/sysctl.conf` != "vm.swappiness=5" ]; then
echo vm.vfs_cache_pressure=50 | sudo tee -a /etc/sysctl.conf
fi
if [ `grep vm.vfs_cache_pressure /etc/sysctl.conf` != "vm.vfs_cache_pressure=50" ]; then
echo vm.vfs_cache_pressure=50 | sudo tee -a /etc/sysctl.conf
fi
Run Code Online (Sandbox Code Playgroud)

和我得到的错误:

/home/erwan/Workspace/Install.sh: ligne 19 : [: != : opérateur unaire attendu
/home/erwan/Workspace/Install.sh: ligne 23 : [: != : opérateur unaire attendu
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

grep scripting bash shell-script

2
推荐指数
1
解决办法
5518
查看次数

如何测试小于其他数字的数字

我有一个像这样的脚本:

while :
do
   Start_Time=$(date +"%s")

      MAIN PROGRAM GOES HERE (CROPPED TO SHORTEN THINGS)

   Run_Time=$(( $(date +"%s") - $Start_Time ))

   if [[ $Run_Time < $Wait_Time ]]
   then
      Delay_Time=$(( $Wait_Time - $Run_Time ))
      sleep $Delay_Time
   else
      echo "Delay exceeded" 
      echo $Run_Time
      echo $Wait_Time
   fi
done
Run Code Online (Sandbox Code Playgroud)

我的问题是,有时即使运行时间小于等待时间,它也会失败 < 测试

这是上次运行的输出:

Delay exceeded
Run_Time 4
Wait_Time 30
Run Code Online (Sandbox Code Playgroud)

scripting shell-script date timestamps

2
推荐指数
1
解决办法
1239
查看次数

filename=${1:-/etc/hosts} 和 filename=/etc/hosts 有什么区别?

filename=${1:-/etc/hosts}和 和有filename=/etc/hosts什么区别?

例如:

filename=/etc/hosts

if [ -r "$filename" ] && [ -s "$filename" ]; then
    md5sum $filename
else
    echo "$filename cannot be processed"
fi
Run Code Online (Sandbox Code Playgroud)

filename=${1:-/etc/hosts}

if [ -r "$filename" ] && [ -s "$filename" ]; then
    md5sum $filename
else
    echo "$filename cannot be processed"
fi
Run Code Online (Sandbox Code Playgroud)

shell scripting bash variable

2
推荐指数
1
解决办法
375
查看次数

如何在不关心区分大小写的情况下遍历多个文件扩展名?

我已经看到有关如何遍历多个文件扩展名的各种主题,但在大多数情况下,列表已定义。

例子:

for file in ${arg}/**/*.{txt,h,py}
do
    ....
done
Run Code Online (Sandbox Code Playgroud)

可以看出,.TXT文件将被忽略。可悲的是,回答它的人说它只适用于 bash4。但我的设置使用 bash3.x。

关于如何做到这一点的任何想法?

scripting bash shell-script

2
推荐指数
2
解决办法
5772
查看次数

你如何在命令工具上发出一系列命令?

我之前有一个问题(已删除),但我仍然不明白为什么很难理解我要问的问题,但我会再试一次,而且会更清楚。

因此,我将多个文件夹从服务器 A 复制到服务器 B,但必须从命令行执行每个复制过程 ('rsync') 的命令,每个文件夹执行一次。

因此,要将文件夹 A 复制到服务器 X,我执行 rsync 命令,完成复制后,我执行新的 rsync 命令将文件夹 B 复制到服务器 X。

我做了一些研究,这可能会帮助您满足我的需求。但是我正在寻找一种方法来一次编写多个命令,如果前一个命令完成了他的操作(从而完成了复制),它会一个接一个地触发。

通常,多个命令在一行中用;分号或与号分隔&&。两者之间的区别在于,如果第一个/上一个命令失败并带有分号,它仍然会继续。如果命令产生错误并且您使用了&符号,则它将停止。

因此,我在我的过程中使用了分号,让我的电脑在一夜之间运行......但它只执行了第一个命令,即使我在一行上写了几个用分号分隔的命令。所以它应该一个一个地执行所有这些......所以首先:我如何正确执行多个命令和B,我的命令有什么问题?

sudo rsync -v -v -r -h -t —progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-01-02-233653/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap ; 
sudo rsync -v -v -r -h -t —progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-01-09-152837/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap ;
sudo rsync -v -v -r -h -t —progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-01-20-201229/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap ;
sudo rsync -v -v -r -h -t —progress /Volumes/My\ Book/Backups.backupdb/MbpScs-van-iSCS/2014-02-21-130931/SSDaeffer /Volumes/BackupMyBook/ViaMacbookMove/DitIsDeMap ;
sudo rsync -v -v -r -h -t …
Run Code Online (Sandbox Code Playgroud)

scripting rsync

2
推荐指数
2
解决办法
1240
查看次数

如何删除带有文件名的文件日志

假设,我有这种名称格式的日志文件。

NameLog.log.2014-09-27
NameLog.log.2014-09-28
NameLog.log.2014-09-29
NameLog.log.2014-09-30
NameLog.log.2014-10-01
NameLog.log.2014-10-02
NameLog.log.2014-10-03
NameLog.log.2014-10-04
Run Code Online (Sandbox Code Playgroud)

我只想删除日志文件

NameLog.log.2014-09-27
NameLog.log.2014-09-28
NameLog.log.2014-09-29
NameLog.log.2014-09-30
Run Code Online (Sandbox Code Playgroud)

实际上我希望文件日志只保留 30 个文件。如何用bash脚本解决这个问题?

command-line scripting bash shell-script

2
推荐指数
1
解决办法
972
查看次数

如何用条件写这个替换

如果单词不在逐字环境中,我现在想在我的工作目录中将单词->替换为 $\to$

伪代码

$\to$替换所有-> 的所有条目,但不在\begin{verbatim}...\end{verbatim} 内

我的 perl 伪代码基于这个优秀的答案

#!/usr/bin/env perl

## The target directories
my @directories=("Cardiology", "Pathophysiology", "Patology and Biopsy", "Physiology", "Propedeutics", "Radiology", "Rheumatology", "Surgery");


## Iterate over the directories
foreach my $dir (@directories) {
    my $dd=0;
    ## Read the current directory
    opendir (my $DIR, "$path/$dir");
    ## Find all files in this directory
    while (my $file = readdir($DIR)) {
        ## Skip any files that aren't .tex …
Run Code Online (Sandbox Code Playgroud)

scripting perl text-processing latex

2
推荐指数
1
解决办法
93
查看次数

如何判断哪个命令在我的系统上有最长的手册?

有没有一种简单的方法可以找出哪个命令的手册页最长?

scripting man info

2
推荐指数
1
解决办法
818
查看次数