bash脚本中的退出状态

热熔器

我正在尝试创建脚本,该脚本可以让我将端口号作为参数,然后找到该端口的服务名称。这是脚本:

#!/bin/bash

grep -E "\W$1\/" /etc/services | awk '{ print $1 }'
if [ $? -eq 0 ]; then 
echo "Service(s) is(are) found correctly!"
else
echo "There is(are) no such service(s)!"
fi

一切正常,但是有一个问题。如果我输入诸如99999(或其他小说端口)的端口-的“退出状态”grep -E "\W$1\/" /etc/services | awk '{ print $1 }'也将为0。这样,我脚本的所有结果都将是正确的,并且else脚本中的语句将不起作用。我该怎么做才能找到解决此问题的方法,并让我的else工作状态为“退出状态”,该怎么办?

案子

您根本不需要grep这里,awk可以在端口号上进行模式匹配。

awk 还可以跟踪是否找到了该端口,并使用适当的退出代码退出。

例如:

$ port=23
$ awk  '$2 ~ /^'"$port"'\// {print $1 ; found=1} END {exit !found}' /etc/services 
telnet
$ echo $?
0

$ port=99999
$ awk  '$2 ~ /^'"$port"'\// {print $1 ; found=1} END {exit !found}' /etc/services 
$ echo $?
1

exit !found因为作品awk变量默认为零(或真),如果他们以前没有被定义-exit !0exit 1因此,如果我们设置found=1匹配的时间exit !found,则END块中的exit 0

这是在您的if / then / else中使用该awk脚本的方法。

#!/bin/bash

awk  '$2 ~ /^'"$1"'\// {print $1 ; found=1} END {exit !found}' /etc/services 
if [ $? -eq 0 ]; then 
    echo "Service(s) is(are) found correctly!"
else
    echo "There is(are) no such service(s)!"
fi

您也可以这样:

if awk  '$2 ~ /^'"$1"'\// {print $1;found=1} END{exit !found}' /etc/services ; then 
    echo "Service(s) is(are) found correctly!"
else
    echo "There is(are) no such service(s)!"
fi

甚至像这样:

awk  '$2 ~ /^'"$1"'\// {print $1 ; found=1} END {exit !found}' /etc/services \
  && echo "Service(s) is(are) found correctly!" \
  || echo "There is(are) no such service(s)!"

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Bash退出代码状态脚本错误

来自分类Dev

Bash在脚本中退出sudo

来自分类Dev

从shell脚本中的函数捕获退出状态

来自分类Dev

由bash脚本中的比较运算符设置的退出状态

来自分类Dev

在脚本中退出bash命令而不退出脚本

来自分类Dev

在脚本中退出bash命令而不退出脚本

来自分类Dev

在bash中获取进程的退出状态

来自分类Dev

Makefile:如何运行bash脚本并忽略其退出状态?

来自分类Dev

Bash脚本在if语句中使用退出状态

来自分类Dev

python,bash,tcl脚本的常见退出状态

来自分类Dev

如何从bash脚本中退出ssh?

来自分类Dev

在bash脚本中从curl获取退出代码

来自分类Dev

在bash脚本中退出案例后SSH退出

来自分类Dev

退出脚本时杀死bash脚本中的后台进程

来自分类Dev

如何从Expect脚本中的命令获取退出状态

来自分类Dev

脚本中没有源的最后退出状态

来自分类Dev

从使用$()的bash脚本退出

来自分类Dev

Chocolatey能否以安装/脚本的退出状态退出?

来自分类Dev

在bash中检查ssh远程命令的退出状态

来自分类Dev

bash在管道中读取netcat状态,然后退出

来自分类Dev

在bash中,如何从tee传递的函数中退出脚本?

来自分类Dev

Bash脚本不会在输入命令中退出

来自分类Dev

在bash脚本中从SSH退出后需要访问阵列

来自分类Dev

为什么`source foo && true`会退出bash中的脚本?

来自分类Dev

BASH脚本中的错误退出不起作用

来自分类Dev

Bash else / if捕获退出状态

来自分类Dev

Bash Shell脚本:虽然apt-get update失败,但退出状态为0,利用退出状态编写自动更新脚本

来自分类Dev

外部脚本功能上的bash命令替换收到错误的退出状态

来自分类Dev

Bash管道的退出状态在脚本中有所不同

Related 相关文章

热门标签

归档