7.1 if 判断

1)基本语法
(1)单分支

  1. if [ 条件判断式 ];then
  2. 程序
  3. fi

或者

  1. if [ 条件判断式 ]
  2. then
  3. 程序
  4. fi

(2)多分支

  1. if [ 条件判断式 ]
  2. then
  3. 程序
  4. elif [ 条件判断式 ]
  5. then
  6. 程序
  7. else
  8. 程序
  9. fi

注意事项:
(1)[ 条件判断式 ],中括号和条件判断之间必须有空格
(2)if 后要有空格
2)案例实操
输入一个数字, 如果是 1, 则输出 banzhang zhen shuai, 如果是 2, 则输出 cls zhen mei,如果是其它, 什么也不输出

  1. ~ touch if.sh
  2. (1)➜ ~ vim if.sh
  3. #!/bin/bash
  4. [ $# -eq 0 ] && \
  5. { echo "Usage: if.sh <NUMBER:(1 or 2)>";exit; }
  6. if [ $1 -eq 1 ] ;then
  7. echo "banzhang zhen shuai"
  8. elif [ $1 -eq 2 ] ;then
  9. echo "cls zhen mei"
  10. else
  11. echo "Please input 1 or 2"
  12. fi
  13. (2)➜ ~ vim if.sh
  14. #!/bin/bash
  15. if [ $1 -eq 1 ]
  16. then
  17. echo "banzhang zhen shuai"
  18. elif [ $1 -eq 2 ]
  19. then
  20. echo "cls zhen mei"
  21. fi
  22. ~ chmod 777 if.sh
  23. ~ bash if.sh 1
  24. banzhang zhen shuai
  25. ~ bash if.sh 2
  26. cls zhen mei

7.2 case 语句

1)基本语法

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

注意事项:
(1) case 行尾必须为单词“in” , 每一个模式匹配必须以右括号“) ” 结束。
(2) 双分号“;;” 表示命令序列结束, 相当于 java 中的 break。
(3) 最后的“*) ” 表示默认模式, 相当于 java 中的 default。
2)案例实操
输入一个数字,如果是1,则输出banzhang,如果是2,则输出 cls,如果是其他,输出renyao

  1. ~ touch case.sh
  2. (1)➜ ~ vim case.sh
  3. #!/bin/bash
  4. [ $# -eq 0 ] && \
  5. { echo "Usage: case.sh <NUMBER:(1 or 2 or other)>";exit; }
  6. case $1 in
  7. 1)
  8. echo "banzhang"
  9. ;;
  10. 2)
  11. echo "cls"
  12. ;;
  13. *)
  14. echo "renyao"
  15. ;;
  16. esac
  17. (2)➜ ~ vim case.sh
  18. #!/bin/bash
  19. [ $# -eq 0 ] && \
  20. { echo "Usage: case.sh <NUMBER:(1 or 2 or other)>";exit; }
  21. case $1 in
  22. "1")
  23. echo "banzhang"
  24. ;;
  25. "2")
  26. echo "cls"
  27. ;;
  28. *)
  29. echo "renyao"
  30. ;;
  31. esac
  32. ~ bash case.sh 1
  33. banzhang
  34. ~ bash case.sh 2
  35. cls
  36. ~ bash case.sh 3
  37. renyao

7.3 for 循环

Shell是提供给管理员对内核进行交互的程序,是为了你更方便实现代码的输入,for循环是实现一些命令的重复操作的

1)基本语法1

  1. for (( 初始值;循环控制条件;变量变化 ))
  2. do
  3. 程序
  4. done

2)案例实操
从1加到100

  1. ~ touch for1.sh
  2. ~ vim for1.sh
  3. #!/bin/bash
  4. SUM=0
  5. for (( i=0;i<=100;i++ ));do
  6. SUM=$[ $SUM+$i ]
  7. done
  8. echo $SUM
  9. ~ chmod 777 for1.sh
  10. ~ bash for1.sh
  11. 5050

1)基本语法2

for 变量 in 值 1 值 2 值 3…
do
    程序
done

2)案例实操
(1)从1加到100

#从1加到100
➜  ~ vim for2.sh 
#!/bin/bash
sum=0
for i in {1..100};do 
        sum=$[ $sum+$i ]
        i=$[ $i+1 ]
done
echo "从1到100的总和 : $sum"

(2)打印所有输入参数

➜  ~ touch for2.sh
(1)➜  ~ vim for2.sh
#!/bin/bash
# 打印数字

for i in {cls,mly,wls}
do
    echo "ban zhang love $i"
done

➜  ~ chmod 777 for2.sh
➜  ~ bash for2.sh
ban zhang love cls
ban zhang love mly
ban zhang love wls

(2)➜  ~ vim for2.sh
#!/bin/bash
# 打印数字

for i in cls mly wls
do
    echo "ban zhang love $i"
done

(2)比较$ 和 $@ 的区别
$
和$@都表示传递给函数或脚本的所有参数, 不被双引号“”包含时, 都以$1 $2 …$n的形式输出所有参数。

➜  ~ touch for3.sh
➜  ~ vim for3.sh
#!/bin/bash

echo '=========$*========='
for i in $* ;do
    echo "ban zhang love $i"
done

echo '=========$@========='
for j in $@ ;do
    echo "ban zhang love $j"
done

➜  ~ chmod 777 for3.sh
➜  ~ bash for3.sh cls mly wls
=========$*=========
ban zhang love cls
ban zhang love mly
ban zhang love wls
=========$@=========
ban zhang love cls
ban zhang love mly
ban zhang love wls

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

➜  ~ touch for4.sh
➜  ~ vim for4.sh
#!/bin/bash
echo '=======$*======='
for i in "$*" ;do
# $*中的所有参数看成是一个整体, 所以这个 for 循环只会循环一次
    echo "ban zhang love ${i}"
done

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

➜  ~ chmod 777 for3.sh
➜  ~ bash for4.sh cls mly wls
=======$*=======
ban zhang love cls mly wls
=======$@=======
ban zhang love cls
ban zhang love mly
ban zhang love wls

引号是视为字符串吧,$*是把写入的变量当成一整个字符串echo出来,而$@是把每一个输入的变量当成独立的echo出来

7.4 while 循环

1)基本语法

while [ 条件判断式 ]
do
    程序
done

2)案例实操
从1加到100

➜  ~ touch while.sh
➜  ~ vim while.sh
#!/bin/bash
SUM=0
i=1

while [ $i -le 100 ] ;do
    SUM=$[ $SUM+$i ]
    i=$[ $i+1 ]
done

echo $SUM

➜  ~ chmod 777 while.sh
➜  ~ bash while.sh
5050
➜  ~ vim while_test.sh 
#!/bin/bash

sum=0
i=1
while [ $i -le ${1} ]
do
        # sum=$[ $sum + $i ]
        # i=$[ $i+1 ]
        let sum+=i
        let i++
done
echo $sum