小编Nec*_*cco的帖子

意外标记“(”附近的语法错误

当我在 CentOS 的 SSH 终端中使用以下代码时,它工作正常:

paste <(printf "%s\n" "TOP")
Run Code Online (Sandbox Code Playgroud)

但是,如果我将相同的行代码放在 shell 脚本(test.sh)中并从终端运行 shell 脚本,它会抛出错误,如下所示

./test.sh: line 30: syntax error near unexpected token ('   
./test.sh: line 30:     paste <(printf "%s\n" "TOP")
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

shell

15
推荐指数
1
解决办法
16万
查看次数

检查 IP 是否在白名单数组范围内

#!/bin/bash

MAXCDN_ARRAY="108.161.176.0/20 94.46.144.0/20 146.88.128.0/20 198.232.124.0/22 23.111.8.0/22 217.22.28.0/22 64.125.76.64/27 64.125.76.96/27 64.125.78.96/27 64.125.78.192/27 64.125.78.224/27 64.125.102.32/27 64.125.102.64/27 64.125.102.96/27 94.31.27.64/27 94.31.33.128/27 94.31.33.160/27 94.31.33.192/27 94.31.56.160/27 177.54.148.0/24 185.18.207.65/26 50.31.249.224/27 50.31.251.32/28 119.81.42.192/27 119.81.104.96/28 119.81.67.8/29 119.81.0.104/30 119.81.1.144/30 27.50.77.226/32 27.50.79.130/32 119.81.131.130/32 119.81.131.131/32 216.12.211.59/32 216.12.211.60/32 37.58.110.67/32 37.58.110.68/32 158.85.206.228/32 158.85.206.231/32 174.36.204.195/32 174.36.204.196/32"

$IP = 108.161.184.123

if [ $IP in $MAXCDN_ARRAY ];
    then:
        echo "$IP is in MAXCDN range"
    else:
        echo "$IP is not in MAXCDN range"
fi 
Run Code Online (Sandbox Code Playgroud)

我有一个MAXCDN_ARRAY用作白名单的 IP 列表。我想检查一个特定的 IP 地址是否在这个数组的范围内。

如何构建代码以便它可以比较数组中的所有 IP 并说出此列表范围内的特定 IP?

ip shell-script

9
推荐指数
2
解决办法
2万
查看次数

在将输出发送到终端之前进行排序

我有以下脚本,可以获取黑名单中某些 IP 的详细信息。

检查.sh

blacklist_ips='
    5.56.148.140
    94.73.159.66
    113.171.224.169
    107.150.42.226
    195.159.233.44
    89.19.7.58
'

for ipx in $blacklist_ips
do
    country=`whois $ipx | grep -i country | tail -1 | awk '{print $2}'`
    hostx=`host $ipx |awk '{print $NF}'|sed "s/\.$//"`
    printf '%s %s %s' $country $ipx $hostx          
    printf '\n'
done
Run Code Online (Sandbox Code Playgroud)

它有效,但我想按国家/地区部分对输出进行排序。

现在我可以简单地去:

bash check.sh | sort -nr
Run Code Online (Sandbox Code Playgroud)

它工作正常。

但我想在将结果发送到终端之前进行排序。换句话说,排序应该在内部完成check.sh,然后应该发送到终端。

如何在 bash 脚本中实现这一点?

sort

3
推荐指数
1
解决办法
2808
查看次数

在 shell 脚本中处理 whois 连接被拒绝的消息

blacklist_ips='
    5.56.148.140
    94.73.159.66
    69.134.15.72
    107.150.42.226
    195.159.233.44
    89.19.7.58
'

for ipx in $blacklist_ips
do
    country=`whois $ipx | grep -i country | tail -1 | awk '{print $2}'`
    hostx=`host $ipx |awk '{print $NF}'|sed "s/\.$//"`
    printf '%s %s %s' $country $ipx $hostx          
    printf '\n'
done
Run Code Online (Sandbox Code Playgroud)

脚本适用于所有 IP,但对于69.134.15.72,

country=`whois $ipx | grep -i country | tail -1 | awk '{print $2}'`
Run Code Online (Sandbox Code Playgroud)

结果如下:

connect: Connection refused
Run Code Online (Sandbox Code Playgroud)

这是因为

whois 69.134.15.72
Run Code Online (Sandbox Code Playgroud)

似乎69.134.15.72没有正确响应。

我不明白为什么它停在第 1 行country并且脚本执行没有到达下一行。

如何检测connection refused错误并做出正确反应?

shell-script

2
推荐指数
1
解决办法
1589
查看次数

在 Bash 脚本中的特定文件行后添加文本

我有一个ip.txt包含 IP 地址的 txt ( ) 文件。我将它们分组在 TCP 和 UDP 下。文件摘录如下:

#TCP
162.298.38.930
162.298.38.931
162.298.38.932
#UDP
162.298.38.930
162.298.38.931
162.298.38.932
Run Code Online (Sandbox Code Playgroud)

我有一个特定的 IP ( 162.298.38.929) 通过 bash 脚本将两者添加到 TCP 和 UDP 行下的这个 ip.txt 中,所以它应该是这样的。

#TCP
162.298.38.929
162.298.38.930
162.298.38.931
162.298.38.932
#UDP
162.298.38.929
162.298.38.930
162.298.38.931
162.298.38.932
Run Code Online (Sandbox Code Playgroud)

如何在 bash 脚本中实现这一点?行号不适用于我的情况,因为 #TCP 和 #UDP 行号可以更改,因为我在文件中添加了大量注释。Bash 脚本应该在 TCP 和 UDP 下搜索并添加 IP。

bash shell-script

1
推荐指数
1
解决办法
2942
查看次数

如何用多个字符分割一行?

的输出w | head -1可以为我的机器提供 2 个不同的结果:

16:34:42 up 32 days,  3:02,  1 user,  load average: 0.14, 0.11, 0.07
14:10:55 up 32 days, 39 min, 1 user, load average: 0.07, 0.13, 0.09
Run Code Online (Sandbox Code Playgroud)

我需要获得负载平均数(例如0.07, 0.13, 0.09)。如何按load average:字符串拆分行,以便始终可以获得两种情况的平均负载数?

string split

1
推荐指数
1
解决办法
5385
查看次数

标签 统计

shell-script ×3

bash ×1

ip ×1

shell ×1

sort ×1

split ×1

string ×1