GVKun编程网logo

如何在Bash中获得if构造的反义词?(bash if语法)

26

想了解如何在Bash中获得if构造的反义词?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于bashif语法的相关问题,此外,我们还将为您介绍关于linux–如何在bash中从字符串中获取最

想了解如何在Bash中获得if构造的反义词?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于bash if语法的相关问题,此外,我们还将为您介绍关于linux – 如何在bash中从字符串中获取最后一个数字?、linux – 如何在bash中获取从Ping接收的数据包的百分比?、linux – 我们如何在Bash中获得两个数组的并集?、在bash/ksh中获取命令的退出代码的新知识。

本文目录一览:

如何在Bash中获得if构造的反义词?(bash if语法)

如何在Bash中获得if构造的反义词?(bash if语法)

如果date -d“2012010123”在date命令返回零退出代码时运行.如何让相反的事情发生?换句话说,如果退出代码为1,如何运行if语句?

解决方法

否定它:

if ! date -d "2012010123"; then
  # do something here (date returned with non-zero exit code)
fi

引用帮助测试:

! EXPR         True if expr is false.

linux – 如何在bash中从字符串中获取最后一个数字?

linux – 如何在bash中从字符串中获取最后一个数字?

对不起,我会更好地解释一下

如何从字符串中获取最后一个数字?

泛型字符串的示例:

If str=str1s2
echo $str | cmd? 
I get 2

If str=234ef85
echo $str | cmd? 
I get 85

 If str=djfs1d2.3
echo $str | cmd? 
I get 3

“CMD?”是我想要的命令/脚本

解决方法

你需要的只是grep -Eo'[0-9] $’:

gv@debian:~$echo 234ef85 |grep -Eo '[0-9]+$'          ## --> 85
gv@debian:~$echo 234ef856 |grep -Eo '[0-9]+$'         ## --> 856
gv@debian:~$echo 234ef85d6 |grep -Eo '[0-9]+$'        ## --> 6
gv@debian:~$echo 234ef85d.6 |grep -Eo '[0-9]+$'       ## --> 6
gv@debian:~$echo 234ef85d.6. |grep -Eo '[0-9]+$'      ## --> no result
gv@debian:~$echo 234ef85d.6.1 |grep -Eo '[0-9]+$'     ## --> 1
gv@debian:~$echo 234ef85d.6.1222 |grep -Eo '[0-9]+$'  ## --> 1222

linux – 如何在bash中获取从Ping接收的数据包的百分比?

linux – 如何在bash中获取从Ping接收的数据包的百分比?

在ping主机时,我希望我的输出只显示收到的数据包的百分比(已发送5个).我假设我需要以某种方式使用grep,但我无法弄清楚如何(我是bash编程的新手).这是我的位置:ping -c 5 -q $host | grep? grep应该怎么做?我想我必须做一些算术来获得收到的百分比,但我可以处理.如何从ping将输出的摘要中提取出我需要的信息?

解决方法

和往常一样,有很多不同的方法可以做到这一点.但是这里有一个选择:

此表达式将捕获“X%数据包丢失”中的百分比数字

ping -c 5 -q $host | grep -oP '\d+(?=% packet loss)'

然后,您可以从100中减去“损失”百分比,以获得“成功”百分比:

packet_loss=$(ping -c 5 -q $host | grep -oP '\d+(?=% packet loss)')
echo $[100 - $packet_loss]

linux – 我们如何在Bash中获得两个数组的并集?

linux – 我们如何在Bash中获得两个数组的并集?

我有两个阵列,说:
arr1=("one" "two" "three")
arr2=("two" "four" "six")

在Bash中将这两个数组联合起来的最佳方法是什么?

解决方法

首先,组合数组:
arr3=("${arr1[@]}" "${arr2[@]}")

然后,应用this post中的解决方案对其进行重复数据删除:

# Declare an associative array
declare -A arr4
# Store the values of arr3 in arr4 as keys.
for k in "${arr3[@]}"; do arr4["$k"]=1; done
# Extract the keys.
arr5=("${!arr4[@]}")

这假设是bash 4.

在bash/ksh中获取命令的退出代码

在bash/ksh中获取命令的退出代码

我想写这样的代码:
command="some command"

saferuncommand $command

saferuncommand() {
   cmnd=$1

   $($cmnd)

   if [ $? != 0 ]; then
      printf "Error when executing command: '$command'"
      exit $ERROR_CODE
   fi
}

但这个代码不工作的方式,我想要的。
我在哪里犯错误?

下面是固定代码:
#!/bin/ksh
saferuncommand() {
  typeset cmnd="$*"
  typeset ret_code

  echo cmnd=$cmnd
  eval $cmnd
  ret_code=$?
  if [ $ret_code != 0 ]; then
    printf "Error : [%d] when executing command: '$cmnd'" $ret_code
    exit $ret_code
  fi
}

command="ls -l | grep p"
saferuncommand "$command"

现在,如果你看看这段代码,我改变的几件事情是:

>使用排版不是必要的,但是一个好的做法。它使cmnd和ret_code local到saferuncommand
>使用ret_code不是必要的,但是一个好的做法是将返回代码存储在一些变量中(并将其存储在ASAP中),以便以后可以像在printf中使用它“Error:[%d] when execution command:’$ command ‘“$ ret_code
>传递带有引号的命令,例如saferuncommand“$ command”。如果你不然那么cmnd将只获得值ls而不是ls -l。更重要的是,如果你的命令包含管道。
>如果要保留空格,可以使用typesnd cmnd =“$ *”而不是排版cmnd =“$ 1”。你可以尝试两者,取决于你的命令参数有多复杂。
> eval用于求值,以便包含管道的命令可以正常工作

注意:记住一些命令给出1作为返回码,即使没有像grep一样的错误。如果grep找到了东西,它会返回0 else 1。

我用KSH / BASH测试。它工作正常。让我知道如果你面对问题运行这个。

今天关于如何在Bash中获得if构造的反义词?bash if语法的分享就到这里,希望大家有所收获,若想了解更多关于linux – 如何在bash中从字符串中获取最后一个数字?、linux – 如何在bash中获取从Ping接收的数据包的百分比?、linux – 我们如何在Bash中获得两个数组的并集?、在bash/ksh中获取命令的退出代码等相关知识,可以在本站进行查询。

本文标签: