步骤一:练习for循环基本用法
脚本1,通过循环读取账户文件user.txt,批量创建账户:
- [root@svr5 ~]# vim for01.sh
- #!/bin/bash
- for i in $(cat root/user.txt)
- do
- useradd $i
- echo "123456" | passwd --stdin $i
- done
- [root@svr5 ~]# chmod +x for01.sh
步骤二:批量检测多个主机的存活状态
1)编写脚本如下:
- [root@svr5 ~]# vim chkhosts.sh
- #!/bin/bash
- for IP in {1..254}
- do
- ping -c 3 -i 0.2 -W 3 192.168.4.$IP &> /dev/null
- if [ $? -eq 0 ] ; then
- echo "Host 192.168.4.$IP is up."
- else
- echo "Host 192.168.4.$IP is down."
- fi
- done
- [root@svr5 ~]# chmod +x chkhosts.sh
4)测试、验证脚本
- … …
- [root@svr5 ~]# ./chkhosts.sh
- Host 192.168.4.5 is up.
- Host 192.168.4.6 is down
while 条件测试
Do
命令序列
Done
步骤一:批量添加用户账号stu1-stu20
添加的账号有固定的前缀stu(练习中可自行设置),多个账号从1开始编号,比如stu1、stu2、stu3、……、stu20。—— 编写脚本uaddwhile.sh,实现批量添加这20个用户账号的功能,密码均设为123456。
脚本编写参考如下:
- [root@svr5 ~]# vim uaddwhile.sh
- #!/bin/bash
- PREFIX="stu" //定义用户名前缀
- i=1
- while [ $i -le 20 ]
- do
- useradd ${PREFIX}$i //添加的用户名为:前缀+编号
- echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null
- let i++
- done
- [root@svr5 ~]# chmod +x uaddwhile.sh
执行脚本并验证结果:
- [root@svr5 ~]# ./uaddwhile.sh
- [root@svr5 ~]# grep ^stu /etc/passwd //检查添加的用户
- stu1:x:531:531::/home/stu1:/bin/bash
- stu2:x:532:532::/home/stu2:/bin/bash
- stu3:x:533:533::/home/stu3:/bin/bash
- stu4:x:534:534::/home/stu4:/bin/bash
- stu5:x:535:535::/home/stu5:/bin/bash
- … …
步骤二:批量删除用户账号stu1-stu20
针对前面执行uaddwhile.sh脚本批量添加的用户账号,再建立一个批量删除这些账号的脚本udelwhile.sh。结构类似,只要替换为删除相关的操作即可。
脚本编写参考如下:
- [root@svr5 ~]# vim udelwhile.sh
- #!/bin/bash
- PREFIX="stu"
- i=1
- while [ $i -le 20 ]
- do
- userdel -r ${PREFIX}$i &> /dev/null
- let i++
- done
- [root@svr5 ~]# chmod +x udelwhile.sh
执行脚本并验证结果:
- [root@svr5 ~]# ./udelwhile.sh
- [root@svr5 ~]# grep ^stu /etc/passwd //再检查已无相应账号信息
- [root@svr5 ~]#
步骤三:检测192.168.4.0/24网段,列出不在线的主机地址
1)任务需求及思路分析
要求的是“检测192.168.4.0/24网段,列出不在线的主机地址”。
检测目标是一个网段,其网络部分“192.168.4.”可以作为固定的前缀;而主机部分包括从1~254连续的地址,所以可结合while循环和自增变量进行控制。
2)根据实现思路编写脚本
- [root@svr5 ~]# vim chknet.sh
- #!/bin/bash
- NET="192.168.4."
- i=1
- while [ $i -le 254 ]
- do
- IP="$i"
- ping -c 3 -i 0.2 -W 1 $IP &> /dev/null
- if [ $? -eq 0 ] ; then
- echo "Host $IP is up."
- else
- echo "Host $IP is down."
- fi
- let i++
- done
- [root@svr5 ~]# chmod +x chknet.sh
3)测试、验证脚本
- [root@svr5 ~]# ./chknet.sh
- Host 192.168.4.1 is down.
- Host 192.168.4.2 is down.
- Host 192.168.4.3 is down.
- Host 192.168.4.4 is down.
- Host 192.168.4.5 is up.
- .. ..
- Host 192.168.4.250 is down.
- Host 192.168.4.251 is down.
- Host 192.168.4.252 is down.
- Host 192.168.4.253 is down.
- Host 192.168.4.254 is down.
case 变量值 in
模式1)
命令序列1 ;;
模式2)
命令序列2 ;;
.. ..
*)
步骤一:编写脚本文件
脚本编写参考如下:
- [root@svr5 ~]# vim test.sh
- #!/bin/bash
- case $1 in
- redhat)
- echo "fedora";;
- fedora)
- echo "redhat";;
- *) //默认输出脚本用法
- echo "用法: $0 {redhat|fedora}"
- exit 1
- esac
- [root@svr5 ~]# chmod +x test.sh
步骤三:验证、测试脚本
未提供参数,或提供的参数无法识别时,提示正确用法:
- [root@svr5 ~]# ./test.sh
- 用法: ./test.sh {redhat|fedora}
确认可响应redhat控制参数:
- [root@svr5 ~]# ./test.sh redhat
- fedora
确认可响应fedora控制参数:
- [root@svr5 ~]# ./test.sh fedora
- redhat
默认命令序列
Esac
function 函数名 {
命令序列
.. ..
}
函数名() {
命令序列
.. ..
}
1. [root@svr5 ~]# mycd(){ //定义函数
2. > mkdir /test
3. > cd /test
4. > }
5. [root@svr5 ~]# mycd //调用函数
6.
7. [root@svr5 ~]# mycd(){ //定义函数
8. > mkdir $1
9. > cd $1
10. > }
11. [root@svr5 ~]# mycd /abc //调用函数
12. [root@svr5 ~]# mycd /360 //调用函数
调用函数时,将用户提供的两个参数传递给函数处理。
2)根据实现思路编写脚本文件
- [root@svr5 ~]# vim funexpr.sh
- #!/bin/bash
- myexpr() {
- echo "$1 + $2 = $[$1+$2]"
- echo "$1 - $2 = $[$1-$2]"
- echo "$1 * $2 = $[$1*$2]"
- echo "$1 / $2 = $[$1/$2]"
- }
- myexpr $1 $2
- [root@svr5 ~]# chmod +x funexpr.sh
break可以结束整个循环;continue结束本次循环,进入下一次循环;exit结束整个脚本,案例如下:
1. [root@svr5 ~]# cat /root/test.sh
2. #!/bin/bash
3. for i in {1..5}
4. do
5. if [ $i -eq 3 ];then
6. break #这里将break替换为continue,exit分别测试脚本执行效果
7. fi
8. echo $i
9. done
10. echo 程序结束