本文共 4640 字,大约阅读时间需要 15 分钟。
for 语句是用于读取不同的变量值,逐个执行同一组命令的循环语句。它的语法结构如下:
for 变量名 in 取值列表 do 命令序列done
取值列表可以有多种方式,例如直接读取 in 后面的值,默认以空格分隔。
#!/bin/bashfor a in `cat /root/1.txt`do useradd $a >> /dev/null echo "用户 $a 已创建" echo "123" | passwd --stdin $a >> /dev/nulldone
chmod +x 1.sh./1.sh
[root@localhost ~]# cat /etc/passwd | tail -4zhangsan:x:1001:1001::/home/zhangsan:/bin/bashlisi:x:1002:1002::/home/lisi:/bin/bashwangwu:x:1003:1003::/home/wangwu:/bin/bashxiaoming:x:1004:1004::/home/xiaoming:/bin/bash
#!/bin/bashfor A in $(cat /root/2.txt)do ping -c 3 -i 0.2 -W 3 $A >> /dev/null if [ $? -eq 0 ] then echo "Host $A is Up" else echo "Host $A is Down" fidone
chmod +x 2.sh./2.sh
Host 192.168.1.1 is UpHost 192.168.1.2 is DownHost 192.168.1.3 is Down
#!/bin/bashfor A in {1..9}do for B in {1..9} do if [ $A -ge $B ] then echo -ne "$B*$A=$[$A*$B]\t" fi donedone sh 99.sh
1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=161*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=361*7=7 2*7=14 3*7=21 4*7=28 5**7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=641*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
while 语句用于重复测试某个条件,只要条件成立就反复执行命令序列。它的语法结构如下:
while 条件测试操作do 命令序列done
#!/bin/bashname="zhangsan"A=1while [ $A -le 20 ]do useradd ${name}$A >> /dev/null echo "用户 ${name}$A 已创建" echo "123" | passwd --stdin ${name}$A >> /dev/null let A++done chmod +x 3.sh./3.sh
[root@localhost ~]# cat /etc/passwd | tail -20zhangsan1:x:1003:1003::/home/zhangsan1:/bin/bashzhangsan2:x:1004:1004::/home/zhangsan2:/bin/bash...zhangsan20:x:1022:1022::/home/zhangsan20:/bin/bash
#!/bin/bashA=$(expr $RANDOM % 100)B=0while truedo echo -p "商品实际价格为 0-99 之间,猜猜看是多少?" read -p "请输入你认为的价格:" C let B++ if [ $C -eq $A ] then echo "恭喜你,猜对了" echo "你总共猜了 $B 次" exit 0 elif [ $C -gt $A ] then echo "太高了" else echo "太低了" fidone
chmod +x 4.sh./4.sh
商品实际价格为 0-99 之间,猜猜看是多少?请输入你认为的价格:50太高了请输入你认为的价格:30太高了请输入你认为的价格:20太低了请输入你认为的价格:23恭喜你,猜对了你总共猜了 4 次
#!/bin/bashA=248while [ $A -le 251 ]do echo -p "例:192.168.1. 请输入你要搜索的网段:" read -p "NET" if ping -c 1 $NET$A >> /dev/null then IP=$(arping -I ens32 -c 1 $NET$A | grep "reply" | awk '{print $4}') MAC=$(arping -I ens32 -c 1 $NET$A | grep "reply" | awk '{print $5}' | awk -F] '{print $1}' | awk -F[ '{print $2}') echo "$IP $MAC" >> /opt/address.txt fi let A++done chmod +x getarp.sh./getarp.sh
[root@localhost ~]# cat /opt/address.txt192.168.1.248 00:1a:2b:3c:4d:5e192.168.1.249 00:1a:2b:3c:4d:5f...
case 语句用于根据变量的不同取值进行多分支处理。它的语法结构如下:
case 变量值 in模式1)命令序列1;;模式2)命令序列2;;...*)默认命令序列esac
#!/bin/bashread -p "请输入一个字符,并按Enter键确认:" Acase $A in[0-9]) echo "你输入的是数字";;[a-z]|[A-Z]) echo "你输入的是字母";;*) echo "你输入的是空格、功能键或其他控制字符";;esac
chmod +x 5.shsh 5.sh
请输入一个字符,并按Enter键确认:6你输入的是数字请输入一个字符,并按Enter键确认:y你输入的是字母请输入一个字符,并按Enter键确认:@你输入的是空格、功能键或其他控制字符
#!/bin/bashcase $1 in*.tar.gz) tar zxf $1 -C /opt/gz >> /dev/null;;*.tar.bz2) tar jxf $1 -C /opt/bz2 >> /dev/null;;*) echo "只能解决gz和bz2方式的压缩文件";;esac
chmod +x znjy.sh./znjy.sh user.tar.gz./znjy.sh user.tar.bz2./znjy.sh aaa
[root@localhost ~]# ll /opt/gz/ /opt/bz2/...[root@localhost ~]# ./znjy.sh user.tar.gz[root@localhost ~]# ll /opt/gz/...[root@localhost ~]# ./znjy.sh user.tar.bz2[root@localhost ~]# ll /opt/bz2/...[root@localhost ~]# ./znjy.sh aaa只能解决gz和bz2方式的压缩文件
#!/bin/bashcase $1 instart) systemctl start httpd echo "httpd服务已启用";;stop) systemctl stop httpd echo "httpd服务已关闭";;restart) systemctl restart httpd echo "服务已重启";;status) netstat -anpt | grep httpd >> /dev/null if [ $? -eq 0 ] then echo "httpd监听端口:$(netstat -anpt | grep httpd | awk '{print $4}')" else echo "httpd未启用" fi ;;*) echo "只能使用start,stop,restart,status参数" ;;esac chmod +x fuwu.sh./fuwu.sh start./fuwu.sh stop./fuwu.sh restart./fuwu.sh status./fuwu.sh aaa
[root@localhost ~]# ./fuwu.sh starthttpd服务已启用[root@localhost ~]# ./fuwu.sh stophttpd服务已关闭[root@localhost ~]# ./fuwu.sh restart服务已重启[root@localhost ~]# ./fuwu.sh statushttpd监听端口::::80[root@localhost ~]# ./fuwu.sh aaa只能使用start,stop,restart,status参数
转载地址:http://niwqz.baihongyu.com/