case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
模式3)
命令序列3
;;
模式4)
命令序列4
;;
......
模式*)
命令序列5
esac
案例
分数选择
[root@localhost data]# vim test.sh
#!/bin/bash
read -p "请输入一个数字" number
case $number in
8[4-9]|9[0-9]|100)
echo "优秀"
;;
7[0-9]|8[0-4])
echo "良"
;;
6[0-9])
echo "合格"
;;
*)
echo "不合格"
esac
验证效果
[root@localhost data]# sh test.sh
请输入一个数字45
不合格
[root@localhost data]# sh test.sh
请输入一个数字78
良
[root@localhost data]# sh test.sh
请输入一个数字98
优秀
[root@localhost data]#
格式
for 变量名 in 取值列表
do
命令序列
done
[root@localhost opt]# vim user.txt
zhangsan
lisi
wangwu
[root@localhost opt]# cd /opt/data
[root@localhost data]# vim for.sh
#!/bin/bash
List=$(cat /opt/user.txt)
#读取从文件user.txt中读取用户的名称
for user in $List
do
useradd $user
#添加用户
echo "1234" | passwd --stdin $user
#为用户设置密码1234
echo "创建${user}成功"
done
执行情况
[root@localhost data]# sh for.sh
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新。
创建zhangsan成功
更改用户 lisi 的密码 。
passwd:所有的身份验证令牌已经成功更新。
创建lisi成功
更改用户 wangwu 的密码 。
passwd:所有的身份验证令牌已经成功更新。
创建wangwu成功
[root@localhost data]# cd /home
[root@localhost home]# ll
总用量 4
drwx------. 3 lisi lisi 78 7月 17 23:06 lisi
drwx------. 15 ttyy ttyy 4096 7月 16 16:30 ttyy
drwx------. 3 wangwu wangwu 78 7月 17 23:06 wangwu
drwx------. 3 zhangsan zhangsan 78 7月 17 23:06 zhangsan
[root@localhost home]# vim for.sh
[root@localhost home]# cd /opt/data/
[root@localhost data]# vim for.sh
++ 自身 变量加+1 --自身变量 -1 let可以单独用
+=5 自身变量+5
-= 自身变量-5
*= 自身变量*5
/= 自身变量/5
%= 自身变量%5
[root@localhost opt]# vim ping.txt
192.168.100.1
192.168.10.1
192.168.100.200
192.168.20.1
[root@localhost data]# vim for-ping.sh
#!/bin/bash
HLIST=$(cat /opt/ping.txt)
for IP in $HLIST
do
ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
if [ $? -eq 0 ]
then
echo "Host is up"
else
echo "Host is down"
fi
done
[root@localhost data]# sh for-ping.sh
Host is up
Host is down
Host is up
Host is down
[root@localhost data]# vim jjfcs.sh
#!/bin/bash
for (( i=1;i<10;i++))
do
for (( j=1; j<=i; j++))
do
echo -ne "${j}*${i}=$(( j*i ))\t";
done
echo " "
done
[root@localhost data]# sh jjfcs.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=16
1*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=36
1*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=64
1*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 条件测试操作
do
命令序列
done
[root@localhost data]# vim while.sh
#!/bin/bash
i=0
list=$( cat /opt/usr.txt)
while [ $i -le 3 ]
do
useradd stu$i
echo "1234" | passwd --stdin stu$i
echo "创建stu$i成功"
let i++
done
**
**
方法一
[root@localhost home]# vim san.sh
#!/bin/bash
i=1
while [ $i -le 100 ]
do
if [ $[$i % 3] -ne 0 ]
then
echo "$i"
fi
let i++
done
方法二
continue 是跳过本次循环语句,直接执行下一个循环。
break 退出当前循环语句。
验证
[root@localhost home]# sh san.sh
1
2
4
5
7
8
10
11
13
14
16
17
19
20
22
23
25
26
28
29
31
32
34
35
37
38
40
41
43
44
46
47
49
50
52
53
55
56
58
59
61
62
64
65
67
68
70
71
73
74
76
77
79
80
82
83
85
86
88
89
91
92
94
95
97
98
100
[root@localhost home]# vim zhijiao.sh
#!/bin/bash
i=1
while [ $i -le 5 ]
do
for (( j=1;j<=i;j++ ))
do
echo -ne "*"
done
echo " "
let i++
done
[root@localhost home]# sh zhijiao.sh
*
**
***
****
*****
[root@localhost data]# vim dysj.sh
#!/bin/bash
for (( i=0; i<=4; i++ ))
do
for(( k=5;k>=2*i-1;k--))
do
echo -ne " "
done
for (( j=0; j<2*i+1; j++ ))
do
echo -ne " *" //*号打印格式注意,在这里的-ne是不换行打印
done
echo " " //这里的空格时换行的意思
done
验证
[root@localhost data]# sh dysj.sh
*
* * *
* * * * *
* * * * * * *
* * * * * * * * *
方法二:
#!/bin/bash
for (( i=0; i<=4; i++ ))
do
for(( k=4;k>=i;k--))
do
echo -n " " //-n 是不换行输出
done
for (( j=0; j<=i; j++ ))
do
echo -n "* "
done
echo " "
done
验证
[root@localhost data]# sh dysj-2.sh
*
* *
* * *
* * * *
* * * * *
[root@localhost shell]# vim linxin.sh
#!/bin/bash
for (( i=0; i<=4; i++ ))
do
for(( k=4;k>=i;k--))
do
echo -n " "
done
for (( j=0; j<=i; j++ ))
do
echo -n "* "
done
echo " "
done
for (( a=0;a<4;a++))
do
for (( b=0;b<=a;b++))
do
echo -n " "
done
for (( c=4;c>a;c--))
do
echo -n " *"
done
echo " "
done
------验证--------
[root@localhost shell]# sh linxin.sh
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*
-n : 不换行打印
-ne :不换行打印
-t : 制表位
continue 是跳过本次循环语句,直接执行下一个循环。
break 退出当前循环语句。
++ 自身 变量加+1 --自身变量 -1 let可以单独用
+=5 自身变量+5
-= 自身变量-5
*= 自身变量*5
/= 自身变量/5
%= 自身变量%5
-a 等于 && ,但是-a 适用于长条语句中