linux - 我想了解这个shell脚本

标签 linux bash

这是我收到的作业。

我被要求解释这段代码的目的是什么。但是,当我执行此操作时,没有出现任何输出。

由于我是 shell 脚本编写的新手,有人可以帮助我吗?

非常感谢。

#!/bin/bash
# $1 = node IP
# $2 = node port
# $3 = hostname to resolve

[[ $# != 3 ]] && logger -p local0.error -t ${0##*/} -- "usage: ${0##*/} <node IP> <node port> <hostname to resolve>" && exit 1
node_ip=$(echo $1 | sed 's/::ffff://')
dig +short @$node_ip $3 IN A &> /dev/null
[[ $? == 0 ]] && echo “UP”

最佳答案

$#:传递给脚本的参数数量,如果您像这样执行此脚本:bash filename.sh p1 p2 p3 p4,则filename.sh中的$#将被评估为4

$?:上一个命令的返回值。在 shell 中,返回值非零表示发生了错误。

[[ $# != 3 ]] && logger ... && 1:表示如果参数数量不是 3,则记录一些内容并退出并返回值 1

node_ip=$(echo $1 | sed 's/::ffff://'):替换第一个参数中的::ffff:,并赋值给node_ip

dig +short @$node_ip $3 IN A &>/dev/null:调用 dig 命令并将输出重定向到 /dev/null,因此您看不到任何打印出来的内容。顺便说一下,我不知道 dig 是做什么的

[[ $? == 0 ]] && echo “UP”:如果 dig 命令(即前一个命令)返回零值,表示成功,则打印单词 UP

关于linux - 我想了解这个shell脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51035356/

相关文章:

bash - 如何在“找到(…)-exec(…){}\;”中的{}中替换字符串bash命令?

bash - 如何仅使用 bash(无编辑器)创建 Kubernetes YAML 部署对象?

regex - sed 和 awk 正则表达式有什么区别

regex - 迭代 apache 2 日志文件名并使用 linux bash 比较数字

linux - 将 AWK TCP 连接绑定(bind)到某个 IP

linux - ftdi d2xx 与 Linux 上的 ftdi_sio 冲突 - 如何自动删除 ftdi_sio

php - Codeigniter index.php 未执行

bash - 尝试将 csv 导入 sqlite 数据库失败并出现错误 - 预期 9 列,但发现 1 - 用 NULL 填充其余部分

php - 从特定域访问时加载指定站点

linux - Linux 上的 Indy HTTP 服务器仅返回响应文本的最后一个字符