一、for循环语句
1、根据姓名列表批量添加用户和删除用户(参考书121--122页)
1)首先创建用户文件,添加用户名
vim users.txt
zhangsan
lisi
wangwu
2)创建创建用户脚本文件
vim useraddfor.sh
3) 编写批量创建用户的脚本
#!/bin/bash ulist=$(cat /root/users.txt) for uname in $ulist do useradd $uname echo "123456" | passwd --stdin $uname &> /dev/null done
4)执行脚本文件
. users.txt
扩展:
这里对 . 做出解释其实就是source的代替符号,用来执行脚本,测试脚本,如果要对脚本做出定时执行,和开机执行的话,还是需要添加执行权限(chmod +x 脚本名)
5)验证用户是否创建成功
cat /etc/passwd
2,根据IP地址列表检查主机状态(参考书122页)
1)首先创建用于测试的主机列表文件(ip地址自己根据情况定)
vim /root/ipadds.txt
192.168.1.1
192.168.1.10
192.168.1.100
127.0.0.1
2)创建文件脚本
vim /root/chkhosts.sh
3)编写批量检测主机脚本
#!/bin/bash hlist=$(cat /root/ipadds.txt) for ip in $hlist do ping -c 3 -i 0.2 -W 3 $ip &> /dev/null if [ $? -eq 0 ] then echo "host $ip is up." else echo "host $ip is down." fi done
4)执行脚本
. chkhosts.sh
二、while循环语句
1、批量添加和删除用户 创建一个20个用户,用户名前缀为stu(参考书124--125页)
1)创建脚本文件
vim uaddwhile.sh
2) 编写添加用户脚本
1. #!/bin/bash 2. NAMEADD="stu" 3. i=1 4. while [ $i -le 20 ] 5. do 6. useradd ${NAMEADD}$i 7. let i++ 8. done
3)执行脚本创建用户
. uaddwhile.sh
4)查看创建是否创建成功
cat /etc/passwd
5)可以更改上面的创建用户脚本,将useradd改为userdel进行删除刚刚创建的用户
vim udelwhile.sh
6)我这里再创建一个文件以免有同学不理解
#!/bin/bash NAMEDEL="stu" i=1 while [ $i -le 20 ] do userdel -r ${NAMEDEL}$i let i++ done
7)执行脚本文件删除用户
. udelwhile.sh
2、猜价格游戏(参考书125--126页)
1)创建猜游戏价格游戏文件
vim pricegame.sh
2) 编写猜价格游戏脚本
#!/bin/bash price=$(expr $RANDOM % 1000) times=0 echo "商品实际价格范围为0--999,猜猜看是什么?" while true do read -p "猜输入你猜测的价格数目:" int let times++ if [ $int -eq $price ] ; then echo "恭喜你答对了,实际价格是$price" echo "你总共猜了${times}次" exit 0 elif [ $int -gt $price ] ; then echo "太高了!" else echo "太低了" fi done
3)执行脚本测试
1. chmod +x pricegame.sh 2. ./gricegame.sh
三、case分支语句
1、检查用户输入的字符类型(参考书128页)
1)创建脚本文件
vim hitkey.sh
2)编写脚本内容
#!/bin/bash read -p "请输入一个字符,并按回车键确认:" key case "$key" in [a-Z]|[A-Z]) echo "您输入的是字母." ;; [0-9]) echo "您输入的是数字." ;; *) echo "您输入的是空格,功能键,或者其他字符." esac
3)执行脚本测试
. hitkey.sh
2,编写系统服务脚本(参考书129页)
1)创建脚本文件
vim mygroq
2)编写系统服务脚本
#!/bin/bash case "$1" in start) echo -n "正在启动sleep服务..." if sleep 7200 & then echo "OK" fi ;; stop) echo -m "正在停止sleep服务..." pkill "sleep" &> /dev/null echo "OK" ;; status) if pgrep "sleep" &> /dev/null ; then echo "sleep服务已经启动." else echo "sleep服务已经停止" fi ;; restart) $0 stop $0 start ;; *) echo "用法:$0 {start|stop|status|restart}" esac
3) 执行脚本文件测试
. myprog
四、上机实验答案(书本131实验案例)
1、编写getarp.sh脚本文件
(1)通过arping命令发送ARP请求,根据反馈结果记录MAC地址。
(2)将网段地址(如192.168.1.)赋值给变量NADD,作为检测地址的前缀。
(3)使用while循环语句,重复检测目标并记录MAC地址,主机地址从1-254。
(4)测试需要打开另一台虚拟机网段在1网段上保证可以ping通,实现实验效果
1)创建脚本文件
vi getarp.sh
2)编写脚本文件
#!/bin/bash NADD="192.168.1." FILE="/etc/ethers" [ -f $FILE ] && /bin/cp -f $FILE $FILE.old HADD=1 while [ $HADD -le 4 ] do ping -c 3 -i 0.2 -W 3 ${NADD}${HADD} &> /dev/null if [ $? -eq 0 ] ; then arp -n | grep ${NADD}${HADD} | awk '{print $1,$3}' >> $FILE fi let HADD++ done
[root@localhost ~]# chmod +x getarp.sh
[root@localhost ~]# ./getarp.sh //执行检测程序
测试:
cat /etc/ethers 192.168.1.12 00:0C:29:C3:F8:51 192.168.1.13 00:50:56:C0:00:01 省略....
2、编写scanhost.sh脚本
(1)有很多方法可以检测一个主机是否开启匿名FTP服务,这里采取以wget下载工具访问FTP根目录的方式,若能够成功列表,则视为匿名FTP已开启,否则视为关闭。
(2)通过awk命令过滤出/etc/ethers文件中的所有IP地址,赋值给变量TARGET。
(3)使用for循环语句,读取TARGET变量中的IP地址,重复探测FTP开启情况。‘
(4)测试需要开启另一台虚拟机安装开启vsftp服务
1)创建脚本文件
vim scanhost.sh
2)编写脚本文件
#!/bin/bash TARGET=$(awk '{print $1}' /etc/ethers ) echo "ftp-YES" for IP in $TARGET do wget ftp://$IP/ &> /dev/null if [ $? -eq 0 ] ; then echo $IP rm -rf index.html fi done
[root@localhost ~]# chmod +x scanhost.sh
[root@localhost ~]# ./scanhost.sh //执行脚本,确认扫描结果
以下主机已开放匿名FTP服务:
192.168.1.12