需求1:批量探测某个网段的主机存活状态,将存活的主机存入ok.txt文件中。
方式一:
[root@web01
for]# cat for3
.sh
#
!/usr
/bin
/bash
for i in
{1..254}
do
{
ip
=10.0.0.$i
ping
-W1
-c1 $ip
&> /dev
/null
if [ $
? -eq
0 ];then
echo
"$ip 存活" >>ok
.txt
fi
}&
done
wait
方式二:
[root@manager
for]# cat
for-07.sh
#
!/bin
/bash
#Date: 2019-10-31
#FileName: for-07.sh
#Description:
ip
=10.0.0.
for n in `seq
1 254`
do {
ping
-W1
-c1 $ip$n
&>/dev
/null
rc
=0
if [ $rc
-eq
0 ];then
echo
"$ip$n 存活"
fi
}&
done
wait
需求2:判断主机存活状态,要求判断三次,如果三次失败则失败。
方式一:
[root@web01
for]# cat for4
.sh
#
!/usr
/bin
/bash
ip
=10.0.0.
for i in `seq
1 254`
do {
ping
-W1
-c1 $ip$i
&> /dev
/null
if [ $
? -eq
0 ];then
echo
"$ip$i 存活" >>yes
.txt
else
for j in
{1..3}
do
ping
-W1
-c1 $ip$i
&> /dev
/null
if [ $
? -eq
0 ];then
echo
"$ip$j 存活" >>yes
.txt
else
echo
"$ip$j 不存活" >>err
.txt
fi
done
fi
}&
done
wait
方式二:
[root@manager
for]# cat
for-12.sh
#
!/bin
/bash
for i in
{1..254}
do
{
ip
=10.0.0.$i
ping
-W1
-c1 $ip
&>/dev
/null
if [ $
? -eq
0 ];then
echo
"$ip 存活" >> ok
.txt
else
#如果判断第一次不存活
,则在进行一次
for循环
,循环
3次
for j in
{1..3}
do
ping
-W1
-c1 $ip
&>/dev
/null
if [ $
? -eq
0 ];then
echo
"$ip 存活" >> ok
.txt
else
echo
"$ip 不存活" >> err
.txt
fi
done
fi
}&
done
wait
二、使用nmap
nmap localhost #查看主机当前开放的端口 nmap -p 1024-65535 localhost #查看主机端口(1024-65535)中开放的端口 nmap -PS 192.168.21.163 #探测目标主机开放的端口 nmap -PS22,80,3306 192.168.21.163 #探测所列出的目标主机端口 nmap -O 192.168.21.163 #探测目标主机操作系统类型 nmap -A 192.168.21.163 #探测目标主机操作系统类型 nmap --help #更多nmap参数请查询帮助信息
需求3:现在有一个ip.txt的文件,里面有很多IP地址。还有一个port.txt的文件,里面有很多端口号。现在希望对ip.txt的每个IP地址进行端口的探测,探测的端口号来源于port.txt文件中 最后将开放的端口和IP保存到一个ok.txt文件。
ip
.txt port
.txt
10.0.0.1 80
10.0.0.2 22
10.0.0.3 3306
10.0.0.4 23
10.0.0.5 443
10.0.0.6 9000
10.0.0.7 123
10.0.0.8 6379
10.0.0.9 10050
172.16.1.5 10051
192.168.10.1
172.16.1.6
[root@web01
for]# cat for6
.sh
#
!/usr
/bin
/bash
#遍历文件中的ip地址
for ip in $
(cat ip
.txt
)
do {
#第二次循环,遍历文件中的端口号
for port in $
(cat port
.txt
)
do
#探测ip与端口的存活状态
nc
-vz
-w
1 $ip $port
&> /dev
/null
if [ $
? -eq
0 ];then
echo
"$ip $port 端口已开放"
else
echo
"$ip $port 端口未开放" >>er
.txt
fi
done
}&
done
wait
需求4:获取系统的所有用户并输出。效果如下:
This is 1 user: root
This is 2 user: bin
This is 3 user: daemon
This is 4 user: adm
...............
1.怎么获取所有的用户
2.遍历/etc/passwd这个文件
3.如何让数字的编号进行
[root@manager for
]
i
=1
user
=$(cat /etc/passwd |awk -F ":" '{print $1}')
for ur
in $user
do
echo "This is ${i} $ur"
i
=$
[ $i +1
]
sleep 1
done
需求5:批量创建100个用户,比如输入cheng则会创建cheng01-100。
[root@manager for]
read
-p
"请输入创建用户的前缀:" qian
for user in $
(seq
-w 1 100
)
do
if [ -z
$qian ];then
echo "请输入前缀"
fi
id
$qian$user &>
/dev
/null
if [ $?
-ne 0
];then
useradd
$qian$user
if [ $?
-eq 0
];then
echo "$qian$user is OK"
fi
else
echo "$qian$user用户已存在"
fi
done
需求6:批量创建用户脚本,需要用户输入创建的用户数量,以及需要用户输入创建的前缀。例如:前缀cheng,个数10,代表创建cheng1~cheng10,总共10个用户。
[root@manager for]
. /etc
/init
.d
/functions
read
-p
"请输入创建用户的前缀:" qian
if [ -z
$qian ];then
echo "请输入前缀,谢谢!"
exit 1
fi
read
-p
"请输入要创建几个用户:" num
if [[ ! $num =~ ^
[0
-9
]+$
]];then
echo "请输入整数"
fi
for i in $
(seq
"$num")
do
user=$
{qian
}$i
useradd
$user &>
/dev
/null
if [ $?
-eq 0
];then
action
"用户创建成功" /bin
/true
else
action
"用户创建失败" /bin
/false
fi
done
需求7:批量创建用户脚本,需要用户输入创建的用户数量(必须是整数),同时还需要用户输入前缀(前缀不能为空)。
例如:前缀cheng,个数10,代表创建cheng1~cheng10,总共10个用户。
[root@manager for]
. /etc
/init
.d
/functions
read
-p
"请输入创建用户的前缀:" qian
if [ -z
$qian ];then
echo "请输入前缀,谢谢!"
exit 1
fi
read
-p
"请输入要创建几个用户:" num
if [[ ! $num =~ ^
[0
-9
]+$
]];then
echo "请输入整数"
fi
for i in $
(seq
"$num")
do
user=$
{qian
}$i
useradd
$user &>
/dev
/null
if [ $?
-eq 0
];then
action
"用户创建成功" /bin
/true
else
action
"用户创建失败" /bin
/false
fi
done
需求8:循环批量创建用户,需要填入用户的数量、用户的前缀、用户的统一密码(使用read、case、for语句)
[root@manager for]
. /etc
/init
.d
/functions
read
-p
"请输入创建用户的前缀:" qian
if [ -z
$qian ];then
echo "请输入前缀,谢谢!"
exit 1
fi
read
-p
"请输入要创建几个用户:" num
if [[ ! $num =~ ^
[0
-9
]+$
]];then
echo "请输入整数"
fi
for i in $
(seq
"$num")
do
user=$
{qian
}$i
useradd
$user &>
/dev
/null
if [ $?
-eq 0
];then
action
"用户创建成功" /bin
/true
else
action
"用户创建失败" /bin
/false
fi
echo "123" |passwd
--stdin
$user &>
/dev
/null
if [ $?
-eq 0
];then
action
"增加密码成功" /bin
/true
else
action
"设置密码失败" /bin
/false
fi
done
需求9:通过读入文件中的用户,进行批量添加用户。
[root@manager for]
for user in $
(cat user
.txt
)
do
useradd
$user
done
需求10:通过读入文件中的用户与密码文件,进行批量添加用户。文件中的格式: user:passwd
[root@manager for]
for user in $
(cat user
.txt
)
do
us=$
(echo $user |awk
-F
":" '{print $1}')
pw=$
(echo $user |awk
-F
":" '{print $2}')
id
$us &>
/dev
/null
if [ $?
-eq 0
];then
continue
else
useradd
$us
echo "$pw" | passwd
--stdin
$us &>
/dev
/null
echo "$us is create ok......"
fi
done
需求11: 批量创建用户,用户名cheng01-100 密码随机(8~12), 然后将创建成功的用户名及密码写入到一个文件中.
mkpasswd
-l
cheng01:dasd1
cheng02:dascxasdas1
!@
[root@manager for]
. /etc
/init
.d
/functions
i=8
read
-p
"请输入你需要创建用户的前缀:" qian
if [ -z
$qian ];then
echo "不能输入回车"
exit
fi
for user in
{1
..10
}
do
id
$qian$user &>
/dev
/null
if [ $?
-ne 0
];then
useradd
$qian$user
mkpasswd
-l
$i
i=$
[ $i +1
]
echo "$qian$user:$(mkpasswd -l $i)" >> pass
.txt
echo "$qian$user 创建成功"
fi
done
需求12:使用case实现批量删除用户。
1
.提示用户输入需要删除的用户以及删除的个数。
2
.如果用户存在则删除,如果不存在则提示no such user。
[root@manager for]
read
-p
"请输入删除用户的前缀:" qian
if [ -z
$qian ];then
echo "请输入用户前缀"
fi
read
-p
"请输入你要删除几个:" num
if [[ ! $num =~ ^
[0
-9
]+$
]];then
echo "请输入数字"
exit
fi
for user in
{1
..100
}
do
id
$qian$num &>
/dev
/null
if [ $?
-eq 0
];then
userdel
$qian$user
echo "$qian$user 删除成功"
else
echo "$qian$user no such user"
fi
done
需求13:查看当前系统已使用内存的百分比,如果以使用的内存占比超过50%则将后台运行的服务列出来,并让用户选择保持不变或者关掉某个服务,后再次显示使用内存的百分比,若还超过50%,则重复上述操作
需求14:使用for循环备份mysql库,每个库对应一个sql文件,需要排除没用的。
1
.如何拿到所有的库名称 wordpress jpress zabbix zrlog
2
.循环拼接备份命令 mysqldump
-uroot
-pcheng
.com
-B zabbix >
/mysql
/data/zabbix
.sql
[root@db01 ~]
db_path=
/backup
/mysql
date_time=$
(date
+%F
)
db_name=$
(mysql
-uroot
-e
"show databases" |sed 1d
|egrep
-v
"*_schema|test|mysql")
[ -d
$db_path ] || mkdir
-p
$db_path
for i in
$db_name
do
mysqldump
-uroot
-B $
{i
} >
$db_path/$
{i
}_$
{date_time
}.sql
if [ -f
$db_path/$
{i
}_$
{date_time
}.sql
];then
echo "$i backup is OK....."
else
echo "$i backup is error...."
fi
done
if [ -f
$db_path/$date_time/day
.txt
];then
touch
$db_path/$date_time/day
.txt
find
$db_path -type f
-mtime
+180
-delete >
$db_path/$date_time/day
.txt
fi
需求15:使用for嵌套循环实现分库分表备份。
[root@db01 ~]
db_path=
/backup
/mysql
date_time=$
(date
+%F
)
db_name=$
(mysql
-uroot
-e
"show databases;" |sed 1d
|egrep
-v
"*_schema|mysql|test")
[ -d
$db_path ] || mkdir
-p
$db_path
for i in
$db_name
do
db_table=$
(mysql
-uroot
-e
"use $i; show tables" |sed 1d
)
for j in
$db_table
do
[ -d
$db_path/$i/$date_time ] || mkdir
-p
$db_path/$i/$date_time
mysqldump
-uroot
$i $j >
$db_path/$i/$date_time/$
{j
}.sql
done
done
需求16:编写一个上课随机点名脚本。
[root@manager for]
if [ -s name
.txt
];then
User=$
(sort --random
-sort name
.txt
|awk
'NR==1')
echo "$User"
grep
$User name
.txt >> name1
.txt
sed
-i
'/'$User'/d' name
.txt
else
cat name1
.txt>name
.txt
rm -rf name1
.txt
fi
[root@manager for]
for i in
{1
..20
}
do
line=$
(cat name
.txt
|wc
-l
)
sj=$
(( $
{RANDOM
}%$line+1
))
echo -e
" $(sed -n "$
{sj
}p
" name.txt) "
sleep 0
.1
done
sj=$
(( $sj + 1
))
username=$
(sed
-n
"${sj}p" name
.txt
)
echo -e 这次回答问题的是:
"\033[32m $username \033[0m" 同学。
需求17: 写一个倒计时脚本.
[root@manager for]
for i in
{9
..1
}
do
echo -ne "$i\b"
sleep 1
done
echo -e
"\b hello world"
[root@manager for]
for i in
{10
..1
}
do
echo -n
-e
"最后倒计时: $i \r"
sleep 1
done
需求18:抓取https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/页面中的所有rpm包 wget
[root@manager for
]
Url_File
=url.txt
Pkg_Name
=$(grep "<a href=" $Url_File | awk -F '"' '{print $2}' | egrep -v "debuginfo|repodata|\.\./")
Get_Url
=https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/
for package
in $Pkg_Name
do
url_package
=$Get_Url$package
wget -O /mnt/
$package $url_package &>/dev/null
if [ $? -eq 0
];then
echo "软件包: $pkg is ok..."
fi
done
需求1:使用while读入文件方式,批量创建用户
[root@manager while]
while read user
do
id
$user &>
/dev
/null
if [ $?
-ne 0
];then
useradd
$user
echo "$user用户创建成功"
else
echo "$user用户已存在"
fi
done<user
.txt
需求2:使用while读入文件方式,批量创建用户以及密码
[root@manager while]
while read user2
do
user=$
(echo $user2|awk
'{print $1}')
pass=$
(echo $user2|awk
'{print $2}')
id
$user &>
/dev
/null
if [ $?
-ne 0
];then
useradd
$user &>
/dev
/null
echo "$pass" |passwd
--stdin
$user
if [ $?
-eq 0
];then
echo "$user 用户创建成功"
fi
else
echo "$user 用户已存在"
fi
done<user2
.txt
需求3:猜数字游戏
[root@manager ~]
sj=$
[$RANDOM%100
+1
]
i=1
while true
do
read
-p
"请输入你要猜的数字:" Action
if [ $Action -eq $sj ];then
echo "恭喜你猜对了"
break
elif
[ $Action -lt $sj ];then
echo "你猜小了"
elif
[ $Action -ge $sj ];then
echo "你猜大了"
fi
let i+
+
done
echo "你总共猜了$i 次,失败了 $[$i -1] 次"