# 流程控制(重点

# if 判断

1.基本语法

if [ 条件判断式 ];then 
 程序 
fi 

或者 

if [ 条件判断式 ] 
 then 
  程序 
fi
1
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

# case 语句

1.基本语法

case $变量名 in 
 "值1") 
  如果变量的值等于值1,则执行程序1 
  ;; 
 "值2") 
  如果变量的值等于值2,则执行程序2 
  ;; 
 …省略其他分支… 
 *) 
  如果变量的值都不是以上的值,则执行此程序 
  ;; 
esac
1
2
3
4
5
6
7
8
9
10
11
12

注意事项:

  1. case行尾必须为单词in,每一个模式匹配必须以右括号)结束。

  2. 双分号;;表示命令序列结束,相当于java中的break。

  3. 最后的*)表示默认模式,相当于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

# for 循环

1.基本语法1

for (( 初始值;循环控制条件;变量变化 )) 
 do 
  程序 
 done
1
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

3.基本语法2

for 变量 in 值1 值2 值3… 
 do 
  程序 
 done
1
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)比较$*$@区别

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

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

# while 循环

1.基本语法

while [ 条件判断式 ] 
 do 
  程序
 done
1
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