当整数 grep 与字符串不匹配时返回什么退出代码?
我知道匹配时返回 0,不匹配时返回 1。
那是对的吗?
我正在尝试在 bash 脚本的 if 语句中使用 tput 命令,但由于某种原因,它的行为出乎意料。当运行命令然后仅在 if 语句中检查退出代码时,事情可以正常工作,但是,当直接在 if 语句中运行命令时,事情不再起作用。这是一个简单的脚本来说明我的问题:
#!/bin/bash
tput setaf 1
if [ $? ]
then
echo "first if works"
fi
if tput setaf 1
then
echo "second if works"
fi
Run Code Online (Sandbox Code Playgroud)
运行此脚本只会打印“如果有效,则首先”。这两个 if 语句不应该工作,因为它们是等效的吗?我错过了什么吗?顺便说一句,这是在 FreeBSD 上运行的,以防万一。
我正在使用 bash。如果我的脚本参数数量错误,如何以不成功代码退出?
我有这个
#!/bin/bash
if [ "$#" -ne 3 ]; then
echo "Should be three parameters to this script -- [CWD driver-directory side-file]"
fi
Run Code Online (Sandbox Code Playgroud)
但随后脚本继续。
如果命令退出时代码为 143(超时,来自“超时命令”),我会尝试返回 0 退出代码,否则返回 1。由于外部约束(CI 脚本),我必须启动命令并在 if 子句中进行检查。
这是我目前使用的:
if timeout -t 10 *command* || [ $? = 143 ]
then exit 0
else exit 1
fi
Run Code Online (Sandbox Code Playgroud)
目前,它总是以 0 代码退出。
我正在 bash 脚本中测试不同的东西,但我遇到了一个无法解释的问题。
我故意写了一个错误的命令,以获得不同于 0 的退出代码,但不知何故,我似乎仍然得到 0。
我正在执行的代码是:
USER_NAME=$(id -uns)
if [[ ${?} -ne 0 ]]
then
echo "Your command failed to execute with exit code ${?}"
exit 1
fi
echo "Your username is ${USER_NAME}"
Run Code Online (Sandbox Code Playgroud)
我的代码的输出是:
id: 未知选项 -- s
尝试“id --help”以获取更多信息。
您的命令无法执行,退出代码为 0
您的用户名是
我猜它以某种方式显示了 echo 命令的退出代码?即便如此,如果退出码为0,为什么会进入if语句呢?
如果是这样,那么我怎样才能让它显示应该显示的实际退出代码?
我需要运行的脚本中有一些命令,它是源代码的自定义 linter。每次运行都会生成一个报告,并在违反规则的情况下以退出代码 1 失败。我需要在失败之前运行所有命令以生成报告,如果任何命令失败且退出代码为非零,则失败。此脚本不起作用,因为它在第一个错误时存在:
lint ./module1/src/main/java && lint ./module2/src/main/java && lint module3/src/main/java
Run Code Online (Sandbox Code Playgroud)
现在我正在使用这个脚本:
lint ./module1/src/main/java
code1="$?"
lint ./module2/src/main/java
code2="$?"
lint ./module3/src/main/java
code3="$?"
if [[ "$code1" != "0" || "$code2" != "0" || "$code3" != "0" ]]; then
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
但它看起来过于复杂并且不可扩展(我需要添加额外的变量并检查下一个命令)。
有没有可能让这个脚本更优雅?
我正在尝试诊断家庭 LAN 上的网络不稳定情况——我的路由器和电缆调制解调器之间的连接丢失。在我的 shell 脚本中,我想通过调制解调器 ping 第一个 IP 地址,并在失败时返回 false,以便我可以在我的脚本中触发其他操作。
有没有人知道这样的野兽?
exit-status ×8
bash ×5
shell-script ×4
shell ×2
ash ×1
freebsd ×1
grep ×1
networking ×1
ping ×1
tput ×1