如果在Bash中,则进行变量比较

迷人的

我正在尝试比较if条件中的两个变量:

#!/bin/bash
Jump="/home/Lists/srv"
S=`echo "$1" | perl -ne 'print lc'`
J1=`grep $S $Jump |awk '{print $1}'`
grep $S $Jump >> /dev/null
if [ $? = 0 ]
 then
   if [ "$S" == "$J1" ]
   then
     echo "$S" is equal to "$J1" :
     ssh -qt $S "$2"
   else
     echo "$S" is not equal to "$J1"
     ssh -qt $J1 "ssh -qt $S $2"
   fi
  else 
    ssh -qt $S "$2"
  fi

每当我尝试执行时,它总是进入其他条件。并执行echo "$S" is not equal to "$J1"

我正在执行此脚本,./test.sh然后执行ex的服务器名称:

./test.sh hostname1

然后,应减小大小写并将其放在变量中S,然后$S在文件中搜索Jump="/home/Lists/srv"如果找到它,则应grep第一列并将其放在另一个变量中J1现在,如果价值SJ1是相似的,那么就应该ssh到$S其他(1)它首先应该ssh来$J1,然后ssh来$S其他(第二个)如果$S在Jump文件中找不到,则应直接使用ssh $S

当我执行它时,它会直接进入其他条件。即使$S$J1相似。

库萨兰达

根据您对要实现的目标的描述,以下可能是执行此操作的脚本:

#!/bin/bash

server="${1,,}"

jumphost="$( awk -vs="$server" '$0 ~ s { print $1; exit }' "/home/Lists/srv" )"

if [[ -z "$jumphost" ]] || [[ "$jumphost" == "$server" ]]; then
    ssh -qt "$server" "$2"
else
    ssh -qt "$jumphost" "ssh -qt \"$server\" \"$2\""
fi

参数扩展${1,,}将小写的值$1对于的旧版本bash,请改用以下命令:

server="$( printf '%s' "$1" | tr 'A-Z' 'a-z' )"

jumphost变量将被设置为文件/home/Lists/srv中与服务器名称匹配的第一行第一列中的任何内容请注意,这仅挑选出文件中第一个匹配项,并且该匹配项考虑了行。

如果匹配项仅应与第二列匹配,$0$2在Awk脚本中更改

如果$jumphost为空,或者与相同$server,则将采用第一个分支,否则将采用第二个分支。

要求对Awk脚本进行说明:

jumphost="$( awk -vs="$server" '$0 ~ s { print $1; exit }'

使用-vAwk可以将Awk变量设置为特定值。在上面的命令中,我们将Awk变量设置s为的值$server然后,该变量在Awk脚本中可用。

在Awk脚本中,

$0 ~ s { print $1; exit }

{ ... }条件$0 ~ s为真时,将执行其中的代码条件的$0 ~ s意思是“$0匹配(正则表达式)s”。变量s是我们给$server之前的值$0是Awk刚刚读取的当前记录(行)的内容。简而言之,这会在文件中找到包含服务器名称的一行。

要在第二列上强制进行完全匹配(例如),可以改为使用$2 == s该条件。

中的代码{ ... }在退出脚本之前打印$1,这是(行)的第一个字段(列)$0我选择退出,以便最终匹配不超过一行。如果用户为指定了太模糊的值$server,则冒着匹配多行的风险。

最后,通过在awk输出的值将被分配给外壳变量jumphost通过$( ... ),这是大致相同`...`

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

变量 sumproduct 如果在 VBA 中

来自分类Dev

如果在Bash中声明

来自分类Dev

Shell脚本-如果在Bash中匹配,则迭代,比较和提取JSON的值

来自分类Dev

比较列表(如果在SQL表中)

来自分类Dev

比较列表(如果在SQL表中)

来自分类Dev

将新值与以前的值进行比较,如果在Excel中不相同,则进行标记(使用Python)

来自分类Dev

如果在Java中 如果在C ++中

来自分类Dev

如果在Java中 如果在C ++中

来自分类Dev

C ++如果在构造函数中传递了这些函数,如何将unordered_map与自定义哈希一起使用并作为成员变量进行比较?

来自分类Dev

如果在将整数与字符串进行比较时返回错误的结果

来自分类Dev

如果在明确的情况下块未运行,则进行Bash操作

来自分类Dev

如果在两个列表的比较中不存在,则添加列表元素

来自分类Dev

比较字符串,如果在SQL Server 2008中为NULL

来自分类Dev

如果在iframe中删除html

来自分类Dev

如果在Twig中嵌套

来自分类Dev

如果在Robot Framework中否则

来自分类Dev

如果在Netlogo环境中实现

来自分类Dev

如果在SQL中查询语句?

来自分类Dev

VBA:如果在中退出

来自分类Dev

如果在树枝中声明

来自分类Dev

如果在方法或主体中声明?

来自分类Dev

如果在SQL Server中

来自分类Dev

如果在.map()中声明?

来自分类Dev

如果在Twig中嵌套

来自分类Dev

如果在SPIP中查询标签

来自分类Dev

如果在PHP中退出

来自分类Dev

如果在linq中声明

来自分类Dev

PHP(如果在表单输入中)

来自分类Dev

如果在Swift 2.0中让警告