if循环语句是怎么写的?
cat 08old_gongji_IP.txt
2023/7/16封锁 23.24.11.195 22.92.21.180/phpmyadmin/index.php
2023/7/17封锁 11.43.128.214 22.92.21.181/phpmyadmin/index.php
2023/7/17封锁 11.43.128.214 22.92.21.179/phpmyadmin/index.php
2023/7/17封锁 11.43.128.214 22.92.21.178/phpmyadmin/index.php
2023/7/17封锁 11.43.128.214 22.92.21.180/phpmyadmin/index.php
2023/7/17封锁 11.43.128.214 22.92.21.182/phpmyadmin/index.php
2023/7/17封锁 11.43.128.214 58.11.11.138/phpmyadmin/index.php
2023/7/17封锁 11.43.128.214 58.11.11.140/phpmyadmin/index.php
2023/7/17封锁 11.43.128.214 58.11.11.139/phpmyadmin/index.php
2023/7/6封锁 11.43.128.214 22.92.21.181/phpmyadmin/index.php
2023/7/6封锁 11.43.128.214 22.92.21.179/phpmyadmin/index.php
2023/7/6封锁 11.43.128.214 22.92.21.182/phpmyadmin/index.php
2023/7/6封锁 11.43.128.214 22.92.21.180/phpmyadmin/index.php
2023/7/6封锁 11.43.128.214 22.92.21.178/phpmyadmin/index.php
2023/5/31封锁 11.43.128.214 22.92.21.178/phpmyadmin/index.php
2023/5/31封锁 11.43.128.214 22.92.21.180/phpmyadmin/index.php
2023/5/31封锁 11.43.128.214 22.92.21.181/phpmyadmin/index.ph
cat 08check_chongfu_gongji_ip.txt
23.24.11.195
11.43.128.214
08check_chongfu_gongji_ip.txt 是要查找以前是否有攻击IP的列表
08old_gongji_IP.txt 是以前攻击IP的汇总表
想通过脚本,输出成以下格式
23.24.11.195 | 2 | 2023/7/16封锁 23.24.11.195 22.92.21.180/phpmyadmin/index.php
23.24.11.195 | 2 | 2023/7/16封锁 23.24.11.195 22.92.21.180/phpmyadmin/index.php
11.43.128.214 | 16| 2023/5/31封锁 11.43.128.214 22.92.21.178/phpmyadmin/index.php
11.43.128.214 | 16| 2023/5/31封锁 11.43.128.214 22.92.21.180/phpmyadmin/index.php
11.43.128.214 | 16| 2023/5/31封锁 11.43.128.214 22.92.21.181/phpmyadmin/index.ph
11.43.128.214 | 16| 2023/7/6封锁 11.43.128.214 22.92.21.181/phpmyadmin/index.php
11.43.128.214 | 16| 2023/7/6封锁 11.43.128.214 22.92.21.179/phpmyadmin/index.php
11.43.128.214 | 16| 2023/7/6封锁 11.43.128.214 22.92.21.182/phpmyadmin/index.php
11.43.128.214 | 16| 2023/7/6封锁 11.43.128.214 22.92.21.180/phpmyadmin/index.php
11.43.128.214 | 16| 2023/7/6封锁 11.43.128.214 22.92.21.178/phpmyadmin/index.php
11.43.128.214 | 16| 2023/7/17封锁 11.43.128.214 22.92.21.181/phpmyadmin/index.php
11.43.128.214 | 16| 2023/7/17封锁 11.43.128.214 22.92.21.179/phpmyadmin/index.php
11.43.128.214 | 16| 2023/7/17封锁 11.43.128.214 22.92.21.178/phpmyadmin/index.php
11.43.128.214 | 16| 2023/7/17封锁 11.43.128.214 22.92.21.180/phpmyadmin/index.php
11.43.128.214 | 16| 2023/7/17封锁 11.43.128.214 22.92.21.182/phpmyadmin/index.php
11.43.128.214 | 16| 2023/7/17封锁 11.43.128.214 58.11.11.138/phpmyadmin/index.php
11.43.128.214 | 16| 2023/7/17封锁 11.43.128.214 58.11.11.140/phpmyadmin/index.php
11.43.128.214 | 16| 2023/7/17封锁 11.43.128.214 58.11.11.139/phpmyadmin/index.php
注意 |16| 右边的数据是按日期排序的,且11.43.128.214的记录行数不一定是16行,可能是几千行,也可能是几行
写了一个如下的脚本,但达不到要求,求指导,谢谢!
#!/bin/sh
set -x
echo -n > pls_08check_chongfu_gongji_ip.txt
sed -i '/^$/d' 08old_gongji_IP.txt
sed -i '/^$/d' 08check_chongfu_gongji_ip.txt
sed -i '/^$/d' pls_08check_ip
echo -n > pls_08chongfu_cishu.txt
echo -n>pls_08check_ip
while read line
do
r=`grep "$line" 08old_gongji_IP.txt|wc -l`
if [ "$r" = "0" ]
then
echo "$line was not found num=0"
else
echo "$line is found num>=1"
echo "$line" >>pls_08check_ip
i=1
if ["$i" -lt $r ]
then
exit0
else
if [ "$i" -lt "$r" ]
then
jilu=`grep "$line" 08old_gongji_IP.txt` |head -n "$i" |tail -n 1
echo "$line | $r | $jilu" >>pls_08chongfu_cishu.txt
i=i++
else
exit 0
fi
fi
fi
done <08check_chongfu_gongji_ip.txt
sort -u pls_08check_ip >> pls_08check_chongfu_gongji_ip.txt
sed -i '/^$/d' pls_08check_chongfu_gongji_ip.txt
# echo -n >08check_chongfu_gongji_ip.txt
rm -f pls_08check_ip
sz pls_08check_chongfu_gongji_ip.txt
cat pls_08check_chongfu_gongji_ip.txt
sz pls_08chongfu_cishu.txt
cat pls_08chongfu_cishu.txt
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
if循环语句在bash脚本中的写法如下:
if [ condition ]; then
# Code to be executed if the condition is true
else
# Code to be executed if the condition is false
fi
在你提供的脚本中,有一些语法错误和逻辑问题。我将为你提供一个修正后的脚本,以满足你的要求:
#!/bin/bash
echo -n > pls_08check_chongfu_gongji_ip.txt
sed -i '/^$/d' 08old_gongji_IP.txt
sed -i '/^$/d' 08check_chongfu_gongji_ip.txt
sed -i '/^$/d' pls_08check_ip
echo -n > pls_08chongfu_cishu.txt
echo -n > pls_08check_ip
while read -r line; do
r=$(grep -c "$line" 08old_gongji_IP.txt)
if [ "$r" -eq 0 ]; then
echo "$line was not found num=0"
else
echo "$line is found num>=1"
echo "$line" >> pls_08check_ip
i=1
while [ "$i" -le "$r" ]; do
jilu=$(grep "$line" 08old_gongji_IP.txt | head -n "$i" | tail -n 1)
echo "$line | $r | $jilu" >> pls_08chongfu_cishu.txt
i=$((i+1))
done
fi
done < 08check_chongfu_gongji_ip.txt
sort -u pls_08check_ip >> pls_08check_chongfu_gongji_ip.txt
sed -i '/^$/d' pls_08check_chongfu_gongji_ip.txt
sz pls_08check_chongfu_gongji_ip.txt
cat pls_08check_chongfu_gongji_ip.txt
sz pls_08chongfu_cishu.txt
cat pls_08chongfu_cishu.txt
此脚本会根据给定的IP列表 08check_chongfu_gongji_ip.txt
在 08old_gongji_IP.txt
中查找匹配的行,并输出到文件 pls_08check_chongfu_gongji_ip.txt
和 pls_08chongfu_cishu.txt
中。请确保脚本和输入文件位于同一目录中,并具有执行权限。
希望这可以帮助到你!
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
引用 皆我百晓生 小程序回复内容作答:
以下是您的脚本中的一些问题:
这是更新后的脚本:
#!/bin/bash
echo -n > pls_08check_chongfu_gongji_ip.txt
sed -i '/^$/d' 08old_gongji_IP.txt
sed -i '/^$/d' 08check_chongfu_gongji_ip.txt
sed -i '/^$/d' pls_08check_ip
echo -n > pls_08chongfu_cishu.txt
echo -n > pls_08check_ip
i=1
while read line
do
r=$(grep -c "$line" 08old_gongji_IP.txt)
if [ "$r" -eq 0 ]; then
echo "$line was not found num=0"
else
echo "$line is found num>=1"
echo "$line" >> pls_08check_ip
while [ "$i" -le "$r" ]
do
jilu=$(grep "$line" 08old_gongji_IP.txt | head -n "$i" | tail -n 1)
echo "$line | $r | $jilu" >> pls_08chongfu_cishu.txt
i=$((i+1))
done
fi
i=1
done < 08check_chongfu_gongji_ip.txt
sort -u pls_08check_ip >> pls_08check_chongfu_gongji_ip.txt
sed -i '/^$/d' pls_08check_chongfu_gongji_ip.txt
sz pls_08check_chongfu_gongji_ip.txt
cat pls_08check_chongfu_gongji_ip.txt
sz pls_08chongfu_cishu.txt
cat pls_08chongfu_cishu.txt
此脚本将会执行以下操作:
pls_08check_chongfu_gongji_ip.txt
文件。08old_gongji_IP.txt
、08check_chongfu_gongji_ip.txt
和 pls_08check_ip
文件中的空行。i
为 1。08check_chongfu_gongji_ip.txt
文件,并在 08old_gongji_IP.txt
中查找匹配行数。pls_08check_ip
文件,并遍历每一个匹配行并写入 pls_08chongfu_cishu.txt
。pls_08check_ip
文件进行排序,并输出文件的大小和内容。pls_08chongfu_cishu.txt
文件的大小和内容。援引讯飞星火:
在这个问题中,我们需要将两个文件(08old_gongji_IP.txt 和 08check_chongfu_gongji_ip.txt)中的数据进行处理,然后将处理后的数据按照指定的格式输出。我们可以使用 shell 脚本来实现这个功能。
首先,我们需要读取 08old_gongji_IP.txt 文件中的每一行数据,然后查找这些数据在 08check_chongfu_gongji_ip.txt 文件中的出现次数。接下来,我们需要将这些数据按照指定的格式输出。
下面是一个实现这个功能的 shell 脚本:
#!/bin/sh
# 创建临时文件
tmp1=$(mktemp)
tmp2=$(mktemp)
# 处理 08old_gongji_IP.txt 文件
grep -hE "^$(cat 08check_chongfu_gongji_ip.txt | awk '{print $1}')" 08old_gongji_IP.txt > $tmp1
# 统计每个 IP 出现的次数
sort -u $tmp1 > $tmp2
# 处理 08check_chongfu_gongji_ip.txt 文件
while read line; do
count=$(grep -c "$line" $tmp2)
echo "$line | $count"
done < 08check_chongfu_gongji_ip.txt
# 删除临时文件
rm $tmp1
rm $tmp2
将上述代码保存为一个名为 process_data.sh 的文件,然后在终端中运行以下命令使其可执行:
chmod +x process_data.sh
最后,运行脚本:
./process_data.sh
脚本将会按照指定的格式输出处理后的数据。
【以下回答由 GPT 生成】
回答:
在Linux中,可以使用if语句在Shell脚本中实现条件判断和循环控制。if语句的基本语法如下:
if condition
then
# 当条件满足时执行的代码块
else
# 当条件不满足时执行的代码块
fi
其中,condition
是一个表达式,用于判断某个条件是否成立。可以使用各种比较运算符(如-eq
、-ne
、-lt
、-gt
、-le
、-ge
等)来比较数值或字符串,也可以使用逻辑运算符(如&&
、||
)组合多个条件。
以下是一些示例代码来展示如何使用if语句的不同用法:
if [ -f "myfile.txt" ]; then
echo "文件存在"
else
echo "文件不存在"
fi
a=10
b=20
if [ $a -lt $b ]; then
echo "a小于b"
elif [ $a -gt $b ]; then
echo "a大于b"
else
echo "a等于b"
fi
str="hello"
if [ -z "$str" ]; then
echo "字符串为空"
else
echo "字符串不为空"
fi
score=85
if [ $score -ge 90 ] && [ $score -le 100 ]; then
echo "优秀"
elif [ $score -ge 80 ] && [ $score -lt 90 ]; then
echo "良好"
elif [ $score -ge 60 ] && [ $score -lt 80 ]; then
echo "及格"
else
echo "不及格"
fi
以上是一些基本示例,你可以根据具体情况修改condition
以及相应的执行代码块。希望这些示例能帮助你更好地理解在Linux中编写if循环语句的用法。如果你有任何进一步的问题,请随时提出。
【相关推荐】