4.2.4 while 循环
格式:
while COMMANDS; do COMMANDS; done
while CONDITION; do
循环体
done
说明:
CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环,因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正
进入条件:CONDITION为true
退出条件:CONDITION为false
无限循环
while true; do
循环体
done
范例:
[root@rocky8 bin]# type while
while is a shell keyword
[root@rocky8 bin]# help while
while: while COMMANDS; do COMMANDS; done
Execute commands as long as a test succeeds.
Expand and execute COMMANDS as long as the final command in the
`while' COMMANDS has an exit status of zero.
Exit Status:
Returns the status of the last command executed.
范例:
[root@rocky8 bin]# help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
[root@rocky8 bin]# type true
true is a shell builtin
[root@rocky8 bin]# help true
true: true
Return a successful result.
Exit Status:
Always succeeds.
#: 和 true 是一样的
范例:
[root@rocky8 ~]# vim while.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-21
#FileName: while.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#copyright (C): 2021 All rights reserved
#*********************************************************************************************
i=1
sum=0
while [ $i -le 100 ];do
let sum+=i
let i++
done
echo $sum
[root@rocky8 ~]# bash while.sh
5050
范例:
[root@rocky8 bin]# vim while_check_disk.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-10
#FileName: while_check_disk.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#copyright (C): 2021 All rights reserved
#*********************************************************************************************
WARNING=80
while :;do
USE=`df|sed -rn '/^\/dev\/sd/s#.* ([0-9]+)%.*#\1#p' |sort -nr |head -1`
if [ $USE -gt $WARNING ];then
echo disk will be full from `hostname -I` | mail -s "disk warning" 88563128@qq.com
fi
sleep 10
done
[root@rocky8 bin]# bash while_check_disk.sh
[root@rocky8 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 374M 0 374M 0% /dev
tmpfs 392M 0 392M 0% /dev/shm
tmpfs 392M 5.6M 386M 2% /run
tmpfs 392M 0 392M 0% /sys/fs/cgroup
/dev/sda2 100G 2.3G 98G 3% /
/dev/sda3 50G 392M 50G 1% /data
/dev/sda1 1014M 188M 827M 19% /boot
tmpfs 79M 0 79M 0% /run/user/0
[root@rocky8 ~]# dd if=/dev/zero of=/boot/f1.img bs=1M count=800
800+0 records in
800+0 records out
838860800 bytes (839 MB, 800 MiB) copied, 1.42045 s, 591 MB/s
[root@rocky8 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 374M 0 374M 0% /dev
tmpfs 392M 0 392M 0% /dev/shm
tmpfs 392M 5.6M 386M 2% /run
tmpfs 392M 0 392M 0% /sys/fs/cgroup
/dev/sda2 100G 2.3G 98G 3% /
/dev/sda3 50G 392M 50G 1% /data
/dev/sda1 1014M 988M 27M 98% /boot
tmpfs 79M 0 79M 0% /run/user/0
#磁盘空间大于80%,邮箱会收到邮件
[root@rocky8 ~]# rm -f /boot/f1.img
[root@rocky8 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 374M 0 374M 0% /dev
tmpfs 392M 0 392M 0% /dev/shm
tmpfs 392M 5.6M 386M 2% /run
tmpfs 392M 0 392M 0% /sys/fs/cgroup
/dev/sda2 100G 2.3G 98G 3% /
/dev/sda3 50G 392M 50G 1% /data
/dev/sda1 1014M 188M 827M 19% /boot
tmpfs 79M 0 79M 0% /run/user/0
范例: 九九乘法表
[root@rocky8 ~]# vim while_99.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-10
#FileName: while_99.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#copyright (C): 2021 All rights reserved
#*********************************************************************************************
i=1
while [ $i -le 9 ];do
j=1
while [ $j -le $i ];do
echo -e "${j}x${i}=$[j*i]\t\c"
let j++
done
echo
let i++
done
[root@rocky8 ~]# bash while_99.sh
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
4.2.5 练习:用while实现
1、编写脚本,求100以内所有正奇数之和
2、编写脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态,并统计在线和离线主机各多少
3、编写脚本,打印九九乘法表
4、编写脚本,利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大值和最小值
5、编写脚本,实现打印国际象棋棋盘
6、后续六个字符串:efbaf275cd、4be9c40b8b、44b2395c46、f8c8873ce0、b902c16c8b、ad865d2f63是通过对随机数变量RANDOM随机执行命令: echo $RANDOM|md5sum|cut -c1-10 后的结果,请破解这些字符串对应的RANDOM值
4.2.6 until 循环
格式:
until COMMANDS; do COMMANDS; done
until CONDITION; do
循环体
done
说明:
进入条件: CONDITION 为false
退出条件: CONDITION 为true
无限循环
until false; do
循环体
Done
范例:
[root@rocky8 ~]# type until
until is a shell keyword
[root@rocky8 ~]# help until
until: until COMMANDS; do COMMANDS; done
Execute commands as long as a test does not succeed.
Expand and execute COMMANDS as long as the final command in the
`until' COMMANDS has an exit status which is not zero.
Exit Status:
Returns the status of the last command executed.
[root@rocky8 ~]# type false
false is a shell builtin
[root@rocky8 ~]# help false
false: false
Return an unsuccessful result.
Exit Status:
Always fails.
范例:
[root@rocky8 ~]# useradd admin; echo 123456 |passwd --stdin admin
Changing password for user admin.
passwd: all authentication tokens updated successfully.
[root@centos7 ~]# ssh admin@172.31.1.8
The authenticity of host '172.31.1.8 (172.31.1.8)' can't be established.
ECDSA key fingerprint is SHA256:bSzdLQOWD7YlTznUn4y0YXH3WN9c11zb/0wqZRE/aHU.
ECDSA key fingerprint is MD5:9b:4f:8b:8e:de:63:fa:7b:7c:b2:a5:f7:da:0b:ed:9f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.31.1.8' (ECDSA) to the list of kNown hosts.
admin@172.31.1.8's password:
[admin@rocky8 ~]$
[root@rocky8 bin]# who |grep -q "^admin\>"
[root@rocky8 bin]# echo $?
0
[admin@rocky8 ~]$ exit
logout
Connection to 172.31.1.8 closed.
[root@centos7 ~]#
[root@rocky8 bin]# who |grep -q "^admin\>"
[root@rocky8 bin]# echo $?
1
范例:
[root@rocky8 bin]# vim until_hacker.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-10
#FileName: until_hacker.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#copyright (C): 2021 All rights reserved
#*********************************************************************************************
until who |grep -q "^admin\>" ;do
sleep 10
done
echo hacker login at `date +"%F %T"` |mail -s warning 88563128@qq.com
[root@rocky8 bin]# bash until_hacker.sh
[root@centos7 ~]# ssh admin@172.31.1.8
admin@172.31.1.8's password:
Last login: Sun Oct 10 16:29:37 2021 from 172.31.0.7
[admin@rocky8 ~]$
#登录就发邮件
[root@rocky8 bin]# vim until_hacker2.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-10
#FileName: until_hacker2.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#copyright (C): 2021 All rights reserved
#*********************************************************************************************
until false ;do
who |grep -q "^admin\>" && echo hacker login at `date +"%F %T"` |mail -s warning 88563128@qq.com
sleep 10
done
[root@rocky8 bin]# bash until_hacker2.sh
[root@centos7 ~]# ssh admin@172.31.1.8
admin@172.31.1.8's password:
Last login: Sun Oct 10 16:33:05 2021 from 172.31.0.7
[admin@rocky8 ~]$
[admin@rocky8 ~]$ exit
logout
Connection to 172.31.1.8 closed.
#只要发现登录就一直发邮件
4.2.7 循环控制语句 continue
continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为第1层
while CONDITION1; do
CMD1
...
if CONDITION2; then
continue
fi
CMDn
...
done
范例:
[root@rocky8 ~]# vim continue_for.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-20
#FileName: continue_for.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#copyright (C): 2021 All rights reserved
#*********************************************************************************************
for ((i=0;i<10;i++));do
[ $i -eq 5 ] && continue
echo $i
echo ------------------------
done
[root@rocky8 ~]# bash continue_for.sh
0
------------------------
1
------------------------
2
------------------------
3
------------------------
4
------------------------
6
------------------------
7
------------------------
8
------------------------
9
------------------------
# continue 结束本层循环
[root@rocky8 ~]# vim continue_for2.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-20
#FileName: continue_for.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#copyright (C): 2021 All rights reserved
#*********************************************************************************************
for ((i=0;i<10;i++));do
for ((j=0;j<10;j++));do
#[ $j -eq 5 ] && continue 2
echo j=$j
done
echo ------------------------
done
[root@rocky8 ~]# bash continue_for2.sh
j=0
j=1
j=2
j=3
j=4
j=5
j=6
j=7
j=8
j=9
------------------------
j=0
j=1
j=2
j=3
j=4
j=5
j=6
j=7
j=8
j=9
------------------------
j=0
j=1
j=2
j=3
j=4
j=5
j=6
j=7
j=8
j=9
------------------------
j=0
j=1
j=2
j=3
j=4
j=5
j=6
j=7
j=8
j=9
------------------------
j=0
j=1
j=2
j=3
j=4
j=5
j=6
j=7
j=8
j=9
------------------------
j=0
j=1
j=2
j=3
j=4
j=5
j=6
j=7
j=8
j=9
------------------------
j=0
j=1
j=2
j=3
j=4
j=5
j=6
j=7
j=8
j=9
------------------------
j=0
j=1
j=2
j=3
j=4
j=5
j=6
j=7
j=8
j=9
------------------------
j=0
j=1
j=2
j=3
j=4
j=5
j=6
j=7
j=8
j=9
------------------------
j=0
j=1
j=2
j=3
j=4
j=5
j=6
j=7
j=8
j=9
------------------------
[root@rocky8 ~]# vim continue_for2.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-20
#FileName: continue_for.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#copyright (C): 2021 All rights reserved
#*********************************************************************************************
for ((i=0;i<10;i++));do
for ((j=0;j<10;j++));do
[ $j -eq 5 ] && continue 2
echo j=$j
done
echo ------------------------
done
[root@rocky8 ~]# bash continue_for2.sh
j=0
j=1
j=2
j=3
j=4
j=0
j=1
j=2
j=3
j=4
j=0
j=1
j=2
j=3
j=4
j=0
j=1
j=2
j=3
j=4
j=0
j=1
j=2
j=3
j=4
j=0
j=1
j=2
j=3
j=4
j=0
j=1
j=2
j=3
j=4
j=0
j=1
j=2
j=3
j=4
j=0
j=1
j=2
j=3
j=4
j=0
j=1
j=2
j=3
j=4
#continue 2 结束上一层循环
4.2.8 循环控制语句 break
break [N]:提前结束第N层整个循环,最内层为第1层
范例:
[root@rocky8 ~]# vim break_for.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-20
#FileName: continue_for.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#copyright (C): 2021 All rights reserved
#*********************************************************************************************
for ((i=0;i<10;i++));do
for ((j=0;j<10;j++));do
[ $j -eq 5 ] && break
echo j=$j
done
echo ------------------------
done
[root@rocky8 ~]# bash break_for.sh
j=0
j=1
j=2
j=3
j=4
------------------------
j=0
j=1
j=2
j=3
j=4
------------------------
j=0
j=1
j=2
j=3
j=4
------------------------
j=0
j=1
j=2
j=3
j=4
------------------------
j=0
j=1
j=2
j=3
j=4
------------------------
j=0
j=1
j=2
j=3
j=4
------------------------
j=0
j=1
j=2
j=3
j=4
------------------------
j=0
j=1
j=2
j=3
j=4
------------------------
j=0
j=1
j=2
j=3
j=4
------------------------
j=0
j=1
j=2
j=3
j=4
------------------------
#break 退出本层循环
[root@rocky8 ~]# vim break_for.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-20
#FileName: continue_for.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#copyright (C): 2021 All rights reserved
#*********************************************************************************************
for ((i=0;i<10;i++));do
for ((j=0;j<10;j++));do
[ $j -eq 5 ] && break 2
echo j=$j
done
echo ------------------------
done
[root@rocky8 ~]# bash break_for.sh
j=0
j=1
j=2
j=3
j=4
#break 2 退出上一层循环
范例:
[root@rocky8 ~]# vim menu.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-20
#FileName: menu.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#copyright (C): 2021 All rights reserved
#*********************************************************************************************
sum=0
COLOR='echo -e \033[1;31m'
COLOR2='echo -e \033[1;32m'
END="\033[0m"
while true;do
echo -e "\033[33;1m\c"
cat <<-EOF
1) 鲍鱼
2) 满汉全席
3) 龙虾
4) 燕窝
5) 帝王蟹
6) 退出
EOF
echo -e "\033[0m"
read -p "请点菜(1-6): " MENU
case $MENU in
1|4)
$COLOR'菜价: $10'$END
let sum+=10
;;
3|5)
$COLOR'菜价: $20'$END
let sum+=20
;;
2)
$COLOR'菜价: $1000'$END
let sum+=1000
;;
6)
$COLOR2"你点的菜总价格是:\$$sum"$END
break
;;
*)
echo "点错了,没有这道菜"
;;
esac
$COLOR2"你点的菜总价格是:\$$sum"$END
done
[root@rocky8 ~]# bash menu.sh
1) 鲍鱼
2) 满汉全席
3) 龙虾
4) 燕窝
5) 帝王蟹
6) 退出
请点菜(1-6): 1
菜价: $10
你点的菜总价格是:$10
1) 鲍鱼
2) 满汉全席
3) 龙虾
4) 燕窝
5) 帝王蟹
6) 退出
请点菜(1-6): 5
菜价: $20
你点的菜总价格是:$30
1) 鲍鱼
2) 满汉全席
3) 龙虾
4) 燕窝
5) 帝王蟹
6) 退出
请点菜(1-6): 6
你点的菜总价格是:$30
范例:
[root@rocky8 ~]# vim guess.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-20
#FileName: guess.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#copyright (C): 2021 All rights reserved
#*********************************************************************************************
NUM=$[RANDOM%10]
while read -p "输入 0-9 之间的数字: " INPUT ;do
if [ $INPUT -eq $NUM ];then
echo "恭喜你猜对了!"
break
elif [ $INPUT -gt $NUM ];then
echo "数字太大了,重新猜!"
else
echo "数字太小了,重新猜!"
fi
done
[root@rocky8 ~]# bash guess.sh
输入 0-9 之间的数字: 8
数字太大了,重新猜!
输入 0-9 之间的数字: 7
数字太大了,重新猜!
输入 0-9 之间的数字: 5
恭喜你猜对了!
4.2.9 循环控制 shift 命令
shift [n] 用于将参量列表 list 左移指定次数,缺省为左移一次。
参量列表 list 一旦被移动,最左端的那个参数就从列表中删除。while 循环遍历位置参量列表时,常用到 shift
范例:
[root@rocky8 ~]# vim createuser.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-20
#FileName: createuser.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#copyright (C): 2021 All rights reserved
#*********************************************************************************************
while true;do
[ -z "$1" ] && break
useradd $1 && echo $1 is created
shift
done
[root@rocky8 ~]# bash createuser.sh a b c d e f
a is created
b is created
c is created
d is created
e is created
f is created
[root@rocky8 ~]# vim for_createuser.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-20
#FileName: for_createuser.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#copyright (C): 2021 All rights reserved
#*********************************************************************************************
for i in $*;do
useradd $i && echo $i is created
done
[root@rocky8 ~]# bash for_createuser.sh user{1..5}
user1 is created
user2 is created
user3 is created
user4 is created
user5 is created
[root@rocky8 ~]# vim createuser2.sh
[root@rocky8 ~]# cat createuser2.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-20
#FileName: createuser2.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#copyright (C): 2021 All rights reserved
#*********************************************************************************************
while [ $1 ];do
useradd $1 && echo $1 is created
shift
done
[root@rocky8 ~]# bash createuser2.sh user{6..10}
user6 is created
user7 is created
user8 is created
user9 is created
user10 is created
[root@rocky8 ~]# vim createuser3.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-20
#FileName: createuser3.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#copyright (C): 2021 All rights reserved
#*********************************************************************************************
if [ $# -eq 0 ];then
echo "Usage: `basename $0` user1 user2 ..."
exit
fi
while [ "$1" ];do
if id $1 &> /dev/null;then
echo $1 is exist
else
useradd $1
echo "$1 is created"
fi
shift
done
echo "All user is created"
[root@rocky8 ~]# bash createuser3.sh
Usage: createuser3.sh user1 user2 ...
[root@rocky8 ~]# bash createuser3.sh tom jack bob user{1..5}
tom is created
jack is created
bob is created
user1 is exist
user2 is exist
user3 is exist
user4 is exist
user5 is exist
All user is created
4.2.10 练习
1、每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户hacker登录,则将登录时间和主机记录于日志/var/log/login.log中,并退出脚本
2、随机生成10以内的数字,实现猜字游戏,提示比较大或小,相等则退出
3、用文件名做为参数,统计所有参数文件的总行数
4、用二个以上的数字为参数,显示其中的最大值和最小值
4.2.11 while read 特殊用法
格式:
while read line; do
循环体
done < /PATH/FROM/SOMEFILE
说明:依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将行赋值给变量line
范例:
[root@rocky8 ~]# read a
1
[root@rocky8 ~]# echo $a
1
[root@rocky8 ~]# while read name;do
echo $name
done
zhang
zhang
wang
wang
li
li
^C
[root@rocky8 ~]# while read name age ;do echo name=$name;echo age=$age ; done
zhang 18
name=zhang
age=18
wang 20
name=wang
age=20
^C
[root@rocky8 ~]# echo raymond | read X ; echo $X
[root@rocky8 ~]# echo raymond | while read X ; do echo $X;done
raymond
[root@rocky8 ~]# echo raymond | { read X ; echo $X; }
raymond
[root@rocky8 ~]# echo raymond | ( read X ; echo $X )
raymond
[root@rocky8 ~]# echo zhang wang li | ( read X Y Z; echo $X $Y $Z )
zhang wang li
[root@rocky8 ~]# echo zhang wang li | while read X Y Z; do echo $X $Y $Z;done
zhang wang li
[root@rocky8 ~]# vim user.txt
zhang 123456
wang 555555
li 666666
[root@rocky8 ~]# while read name password ; do useradd $name && echo $name is created; echo $password| passwd --stdin $name &> /dev/null;done < user.txt
zhang is created
wang is created
li is created
范例:
[root@rocky8 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 382688 0 382688 0% /dev
tmpfs 400580 0 400580 0% /dev/shm
tmpfs 400580 5688 394892 2% /run
tmpfs 400580 0 400580 0% /sys/fs/cgroup
/dev/sda2 104806400 2287884 102518516 3% /
/dev/sda3 52403200 1446976 50956224 3% /data
/dev/sda1 1038336 191796 846540 19% /boot
tmpfs 80116 0 80116 0% /run/user/0
[root@rocky8 ~]# df|sed -rn '/^\/dev\/sd/s#^([^ ]+).* ([0-9]+)%.*#\1 \2#p'
/dev/sda2 3
/dev/sda3 3
/dev/sda1 19
[root@rocky8 ~]# vim disk_check.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-20
#FileName: disk_check.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#copyright (C): 2021 All rights reserved
#*********************************************************************************************
WARNING=80
df|sed -rn '/^\/dev\/sd/s#^([^ ]+).* ([0-9]+)%.*#\1 \2#p' |while read part use ;do
[ $use -ge $WARNING ] && echo "$part will be full,use:$use" |mail -s "disk warning" 88563128@qq.com
done
[root@rocky8 ~]# cp /dev/zero /boot/f1.img
cp: error writing '/boot/f1.img': No space left on device
[root@rocky8 ~]# bash disk_check.sh
范例:
[root@rocky8 ~]# vim while_read_check_ddos.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-20
#FileName: while_read_check_ddos.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#copyright (C): 2021 All rights reserved
#*********************************************************************************************
lastb | sed -rn '/ssh:/s@.* ([0-9.]{1,3}{3}[0-9]{1,3}) .*@\1@p'|sort |uniq -c |while read count ip ;do
if [ $count -gt 3 ];then
iptables -A INPUT -s $ip -j REJECT
fi
done
范例:查看/sbin/nologin的shell类型的用户名和UID
[root@rocky8 ~]# vim while_read_passwd.sh
#!/bin/bash
#
#**********************************************************************************************
#Author: Raymond
#QQ: 88563128
#Date: 2021-10-20
#FileName: while_read_passwd.sh
#URL: raymond.blog.csdn.net
#Description: The test script
#copyright (C): 2021 All rights reserved
#*********************************************************************************************
while read line ;do
if [[ "$line" =~ /sbin/nologin$ ]] ;then
echo $line | cut -d: -f1,3
fi
done < /etc/passwd
[root@rocky8 ~]# bash while_read_passwd.sh
bin:1
daemon:2
adm:3
lp:4
mail:8
operator:11
games:12
ftp:14
nobody:65534
dbus:81
systemd-coredump:999
systemd-resolve:193
tss:59
polkitd:998
unbound:997
sssd:996
sshd:74
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。