目录
一、判断
1、单分支结构
(条件满足则执行,不满足则退出)
if <条件表达式>
then
指令
fi
或者
if <条件表达式>;then
指令
fi
2、双分支结构
(条件满足时执行指令1,不满足时执行指令2)
if <条件表达式>
then
指令序列1
else
指令序列2
fi
3、多分支结构
(存在多个条件,条件1满足时执行指令1,后续不执行;如果条件1不满足时,继续匹配条件2,如果满足则执行指令2,后续不执行,以此类推,直到匹配上为止。如果条件都不满足,则执行最后一步else后的指令)
if 条件表达式1
then
命令序列1
elif 条件表达式2
then
命令序列2
elif 条件表达式3
then
命令序列3
else
命令序列n
fi
例题:判定成绩
85-100 -》 A
70-84 -> B
60-69 -> C
0-59 ->D
程序的边界问题:>100, <0
必须输入的是数字:0-100
read -p "please enter your score: " score ##用户输入分数
if [ $score -lt 0 ] || [ $score -gt 100 ]
then
echo "Please enter the correct score" ##边界问题,当用户输入的分数小于0或者大于100时,提示用户输入正确的分数
elif [ $score -ge 85 ]
then
echo "A" ##用户输入的分数大于等于85且小于等于100时,打印A
elif [ $score -ge 70 ]
then
echo "B" ##用户输入的分数大于等于70且小于85时,打印B
elif [ $score -ge 60 ]
then
echo "C" ##用户输入的分数大于等于60且小于70时,打印C
else
echo "D" ##最后分数大于等于0且小于60时,打印D
fi
二、循环
1、for循环
1、1带列表的for循环语句
带列表的for
循环通常用于将一组语句执行已知的次数,其基本语法如下:
for variable in list --variable称为循环变量,list是一个列表,可以是一系列的数字或者字符串,元素之间使用空格隔开
do
statement1
statement2 --循环体,即循环结构中重复执行的语句。for循环体的执行次数与list中元素的个数有关
...
done
在带列表的for
语句执行时,
Shell
会将
in
关键字后面的
list
列表的第
1 个元素的值赋给变量variable
,然后执行循环体;当循环体中的语句执行完毕之后,
Shell
会将列表中的 第2
个元素的值赋给变量
variable
,然后再次执行循环体。当
list
列表中的所有的元素都被访问后,
for
循 环结构终止,程序将继续执行done
语句后面的其他的语句。
例题:循环创建用户:用户名为user01-user20
[root@baiheng shell]# vim useradd.sh
for i in {01..20} ##拿到01-20这20个数
do
useradd user$i ##循环添加user01-user20
echo "123456" | passwd --stdin $user &> /dev/null ##给用户设置密码
done
[root@baiheng shell]# bash useradd.sh
[root@baiheng shell]# tail -20 /etc/passwd --执行完成后查看
user01:x:1006:1007::/home/user01:/bin/bash
user02:x:1007:1008::/home/user02:/bin/bash
user03:x:1008:1009::/home/user03:/bin/bash
user04:x:1009:1010::/home/user04:/bin/bash
user05:x:1010:1011::/home/user05:/bin/bash
user06:x:1011:1012::/home/user06:/bin/bash
user07:x:1012:1013::/home/user07:/bin/bash
user08:x:1013:1014::/home/user08:/bin/bash
user09:x:1014:1015::/home/user09:/bin/bash
user10:x:1015:1016::/home/user10:/bin/bash
user11:x:1016:1017::/home/user11:/bin/bash
user12:x:1017:1018::/home/user12:/bin/bash
user13:x:1018:1019::/home/user13:/bin/bash
user14:x:1019:1020::/home/user14:/bin/bash
user15:x:1020:1021::/home/user15:/bin/bash
user16:x:1021:1022::/home/user16:/bin/bash
user17:x:1022:1023::/home/user17:/bin/bash
user18:x:1023:1024::/home/user18:/bin/bash
user19:x:1024:1025::/home/user19:/bin/bash
user20:x:1025:1026::/home/user20:/bin/bash
1、2不带列表的for循环语句
在某些特殊情况下,for
循环的条件列表可以完全省略,称为不带列表的
for
循环语句。如果没有为
for
循环提供条件列表,Shell
将从命令行获取条件列表。不带列表的
for
循环语句的一般语法如下:
for variable (in $@或$*)--系统变量$@同样可以获取所有的参数
do
statement1
statement2
...
done
1、3 类C风格的for循环语句
for ((expression1;expression2;expression3))
do
statement1;
statement2;
...
done
在上面的语法中,for
循环语句的执行条件被
2
个圆括号包括起来。执行条件分为
3
个部分,由
2
个分号隔开,第1
部分
expression1
通常是条件变量初始化的语句;第
2
部分
expression2
是决定是否执行
for
循环的条件。当expression2
的值为
0
时,执行整个循环体;当
expression2
的值为非
0
时,退出
for
循环体。第3
部分,即表达式
expression3
通常用来改变条件变量的值,例如递增或者递减等。
2、while循环
while expression --表示while循环体执行时需要满足的条件
do
statement1
statement2
...
done
通常情况下,expression
代表一个测试表达式,当
expression
的值为
0
时才执行循环体中的语句,每次执行到done
时就会重新判断
while
条件表达式是否成立,当
expression
的值为非
0
值时,将
退出循环体。与其他的循环结构一样,
do
和
done
这
2
个关键字之间的语句构成了循环体。
3、until循环语句
until循环语句同样也存在于多种程序设计语言中。顾名思义,
until
语句的作用是将循环体重复执行,直 到某个条件成立为止。until
语句的基本语法如下:
until expression
do
statement1
statement2
...
done
在上面的语法中,expression是一个条件表达式。当该表达式的值不为
0
时,将执行
do
和
done
之间的语 句;当expression
的值为
0
时,将退出
until
循环结构,继续执行
done语句后面的其它的语句。区别是while 循环在条件为真是继续执行循环,而until 则是在条件为假时执行循环。
4、select循环语句
select循环语句的主要功能是创建菜单,在执行带有
select
循环语句脚本时,输出会按照数字顺序的列表 显示一个菜单,并显示提示符(默认是#
?),同时等待用户输入数字选择。
select
语句的基本语法如 下:
select 变量名 [ in 菜单值列表 ]
do
statement1
statement2
...
done
5 、嵌套循环
在程序设计语言中,嵌套的循环也是一种非常常见的结构。Shell
同样也支持嵌套循环。通过嵌套循环,可以完成更复杂的功能。
例题:打印九九乘法表
[root@baiheng shell]# vim 99.sh
for(( i=1;i<=9;i++ ))
do
for(( j=1;j<=9;j++ ))
do
[ $j -le $i ] && echo -n "${i}*${j}=$((i*j)) " ##判断j是否小于i,当j大于i时不输出,输出不换行,末尾加一个制表符
done
echo " " #输出一个换行符
done
[root@baiheng shell]# bash 99.sh
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81