流年似水博客开通了,本站主要是写关于Web和大数据方面内容,正在更新中,欢迎大家光临!
  1. 文章:97 篇
  2. 总浏览:69,076 次
  3. 评论:22条
  4. 最后更新:2020-06-08
  5. 分类目录:39 个

Shell之流程控制(if、switch、for、while)

Shell l, xy 383℃ 0评论

流程控制(if、switch、for、while)

7.1 if 判断

1.基本语法
if [ 条件判断式 ];then
  程序
fi
或者
if [ 条件判断式 ]
  then
    程序
fi


       注意事项:
1[ 条件判断式 ]中括号和条件判断式之间必须有空格

2if后要有空格



2.案例实操
1)输入一个数字,如果是1,则输出banzhang zhen shuai,如果是2,则输出cls zhen mei,如果是其它,什么也不输出。
[xy@hadoop101 datas]$ touch if.sh
[xy@hadoop101 datas]$ vim if.sh
#!/bin/bash
if [ $1 -eq "1" ]
then
        echo "banzhang zhen shuai"
elif [ $1 -eq "2" ]
then
        echo "cls zhen mei"
fi
[xy@hadoop101 datas]$ chmod 777 if.sh
[xy@hadoop101 datas]$ ./if.sh 1
banzhang zhen shuai


7.2 case 语句

1.基本语法
case $变量名 in
  "值1")
    如果变量的值等于值1,则执行程序1
    ;;
  "值2")
    如果变量的值等于值2,则执行程序2
    ;;
  …省略其他分支…
  *)
    如果变量的值都不是以上的值,则执行此程序
    ;;
esac

注意事项

case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
双分号“;;”表示命令序列结束,相当于java中的break
最后的“*)”表示默认模式,相当于java中的default



2.案例实操

1)输入一个数字,如果是1,则输出banzhang,如果是2,则输出cls,如果是其它,输出renyao
[xy@hadoop101 datas]$ touch case.sh
[xy@hadoop101 datas]$ vim case.sh
!/bin/bash
case $1 in
"1")
        echo "banzhang"
;;
"2")
        echo "cls"
;;
*)
        echo "renyao"
;;
esac
[xy@hadoop101 datas]$ chmod 777 case.sh
[xy@hadoop101 datas]$ ./case.sh 1
1


z7.3 for 循环

1.基本语法1
  for (( 初始值;循环控制条件;变量变化 ))
  do
    程序
  done

2.案例实操
1)从1加到100
[xy@hadoop101 datas]$ touch for1.sh
[xy@hadoop101 datas]$ vim for1.sh
#!/bin/bash
s=0
for((i=0;i<=100;i++))
do
        s=$[$s+$i]
done
echo $s
[xy@hadoop101 datas]$ chmod 777 for1.sh
[xy@hadoop101 datas]$ ./for1.sh
“5050”

3.基本语法2
for 变量 in 值1 值2 值3…
  do
    程序
  done


4.案例实操
       1)打印所有输入参数
[xy@hadoop101 datas]$ touch for2.sh
[xy@hadoop101 datas]$ vim for2.sh
#!/bin/bash
#打印数字
for i in $*
    do
      echo "ban zhang love $i "
    done
[xy@hadoop101 datas]$ chmod 777 for2.sh
[xy@hadoop101 datas]$ bash for2.sh cls xz bd
ban zhang love cls
ban zhang love xz
ban zhang love bd

2)比较$*$@区别
a$*$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n的形式输出所有参数
[xy@hadoop101 datas]$ touch for.sh
[xy@hadoop101 datas]$ vim for.sh
#!/bin/bash
for i in $*
do
      echo "ban zhang love $i "
done
for j in $@
do     
        echo "ban zhang love $j"
done
[xy@hadoop101 datas]$ bash for.sh cls xz bd
ban zhang love cls
ban zhang love xz
ban zhang love bd
ban zhang love cls
ban zhang love xz
ban zhang love bd


b当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “$2”…”$n”的形式输出所有参数


[xy@hadoop101 datas]$ vim for.sh


#!/bin/bash


for i in "$*"
#$*中的所有参数看成是一个整体,所以这个for循环只会循环一次
        do
                echo "ban zhang love $i"
        done


for j in "$@"
#$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
        do
                echo "ban zhang love $j"
done


[xy@hadoop101 datas]$ chmod 777 for.sh
[xy@hadoop101 datas]$ bash for.sh cls xz bd
ban zhang love cls xz bd
ban zhang love cls
ban zhang love xz
ban zhang love bd

7.4 while 循环

1.基本语法
while [ 条件判断式 ]
  do
    程序
  done


2.案例实操
       1)从1加到100
[xy@hadoop101 datas]$ touch while.sh
[xy@hadoop101 datas]$ vim while.sh
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
        s=$[$s+$i]
        i=$[$i+1]
done
echo $s
[xy@hadoop101 datas]$ chmod 777 while.sh
[xy@hadoop101 datas]$ ./while.sh
5050

循环实例:
  1 #!/bin/bash
  2 # Program:
  3 #        script function..i.
  4 # History:
  5 #       2019-05-25 04:25:36             xy               First release
  6
  7
  8 # 比较好理解的for循环
  9 sum=0
10 for ((i=1;i<=100;i++))
11 do      
12         sum=$(($sum+$i))
13 done
14
15 echo "sum=${sum}"
16
17
18 unset i;
19 unset sum;
20
21 # 经常使用的for循环
22 sum=0
23 # seq 1 100 生成1-100的集合
24 for i in $(seq 1 100)
25 do      
26         sum=$(($sum+$i))
27 done
28
29 echo "sum=${sum}"
30
31
32 unset i
33 unset sum
34
35
36 # 经常使用的while循环
37 i=1
38 sum=0
39 while [ $i -le 100 ]
40 do      
41         sum=$(($sum+$i))
42         i=$(($i+1))
43 done
44 echo "sum=${sum}"
45
46 unset i
47 unset sum
48 i=1
49 sum=0
50 # 不经常使用的until循环
51 until [ $i -eq 101 ]
52 do      
53         sum=$(($sum+$i))
54         i=$(($i+1))
55 done
56
57 echo "sum=${sum}"

运行结果:

转载请注明:流年似水 » Shell之流程控制(if、switch、for、while)

喜欢 (0)or分享 (0)

Warning: copy(https://cn.gravatar.com/avatar/?s=54&d=%2Fwp-content%2Fthemes%2Fyusi1.0%2Fimg%2Fdefault.png&r=g): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 239

Warning: copy(/wp-content/themes/yusi1.0/img/default.png): failed to open stream: No such file or directory in /usr/share/nginx/html/timewentby/wp-content/themes/yusi1.0/functions.php on line 243
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址