# 流程控制(重点)
# if 判断
1.基本语法
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
注意事项:
(1)[ 条件判断式 ]
中括号和条件判断式之间必须有空格
(2)if后要有空格
2.案例实操
输入一个数字,如果是1,则输出 “我真帅”,如果是2,则输出 “苍老师真美”,如果是其它,什么也不输出。
[bigdata@hadoop01 datas]$ vim if.sh
#!/bin/bash
if [ $1 -eq 1 ]
then
echo 我真帅
elif [ $1 -eq 2 ]
then
echo 苍老师真美
fi
[bigdata@hadoop01 datas]$ bash if.sh
if.sh: 第 3 行:[: -eq: 期待一元表达式 #需要输入参数
if.sh: 第 6 行:[: -eq: 期待一元表达式
[bigdata@hadoop01 datas]$ bash if.sh 1
我真帅
[bigdata@hadoop01 datas]$ bash if.sh 2
苍老师真美
[bigdata@hadoop01 datas]$ bash if.sh 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# case 语句
1.基本语法
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
注意事项:
case行尾必须为单词
in
,每一个模式匹配必须以右括号)
结束。双分号
;;
表示命令序列结束,相当于java中的break。最后的
*)
表示默认模式,相当于java中的default。
2.案例实操
输入一个数字,如果是1,则输出limi,如果是2,则输出cls,如果是其它,输出renyao。
[bigdata@hadoop01 datas]$ vim case.sh
#!/bin/bash
case $1 in
1)
echo limi
;;
2)
echo cls
;;
*)
echo renyao
;;
esac
[bigdata@hadoop01 datas]$ bash case.sh 1
limi
[bigdata@hadoop01 datas]$ bash case.sh 2
cls
[bigdata@hadoop01 datas]$ bash case.sh 3
renyao
[bigdata@hadoop01 datas]$ bash case.sh 4
renyao
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# for 循环
1.基本语法1
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
1
2
3
4
2
3
4
2.语法1案例实操
从1加到100
[bigdata@hadoop01 datas]$ vim for.sh
#!/bin/bash
s=0
for((i=1;i<=100;i++))
do
s=$[$s+$i]
done
echo $s
[bigdata@hadoop01 datas]$ bash for.sh
5050
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
3.基本语法2
for 变量 in 值1 值2 值3…
do
程序
done
1
2
3
4
2
3
4
4.语法2案例实操
(1)打印所有输入参数
# $*:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
[bigdata@hadoop01 datas]$ vim for2.sh
#!/bin/bash
for i in $*
do
echo "limi love $i"
done
[bigdata@hadoop01 datas]$ bash for2.sh hamey
limi love hamey
[bigdata@hadoop01 datas]$ bash for2.sh kayson
limi love kayson
[bigdata@hadoop01 datas]$ bash for2.sh girl
limi love girl
[bigdata@hadoop01 datas]$ bash for2.sh hamey kayson girl
limi love hamey
limi love kayson
limi love girl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(2)比较$*
和$@
区别
a. $*
和$@
都表示传递给函数或脚本的所有参数,不被双引号""
包含时,都以$1 $2 …$n
的形式输出所有参数。
# $@:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
[bigdata@hadoop01 datas]$ vim for2.sh
#!/bin/bash
#!/bin/bash
for i in $*
do
echo "limi love $i"
done
for j in $@
do
echo "limi love $j"
done
[bigdata@hadoop01 datas]$ bash for2.sh hamey kayson girl
limi love hamey
limi love kayson
limi love girl
limi love hamey
limi love kayson
limi love girl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
b. 当它们被双引号""
包含时,$*
会将所有的参数作为一个整体,以$1 $2 …$n
的形式输出所有参数;$@
会将各个参数分开,以$1
$2
…$n
的形式输出所有参数。
# 使用引号
[bigdata@hadoop01 datas]$ vim for2.sh
#!/bin/bash
for i in "$*" #$*把所有的参数看成一个整体
do
echo "limi love $i"
done
for j in "$@" #$@把每个参数区分对待
do
echo "limi love $j"
done
[bigdata@hadoop01 datas]$ bash for2.sh hamey kayson girl
limi love hamey kayson girl
limi love hamey
limi love kayson
limi love girl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# while 循环
1.基本语法
while [ 条件判断式 ]
do
程序
done
1
2
3
4
2
3
4
注意事项:
(1)[ 条件判断式 ]
中括号和条件判断式之间必须有空格
(2)while后要有空格
2.案例实操
从1加到100
[bigdata@hadoop01 datas]$ vim while.sh
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
s=$[$s+$i]
i=$[$i+1]
done
echo $s
[bigdata@hadoop01 datas]$ bash while.sh
5050
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
← 条件判断 read读取控制台输入 →