6.1、流程控制(重点)(if/case/for/while)
6.1.1、语法
1)单分支
if [ 条件判断式 ];then
程序
fi
或
if [ 条件判断式 ]
then
程序
fi
2)多分支
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
注意事项:
- [ 条件判断式 ], 中括号和条件判断式之间必须有空格
- if 后要有空格
6.1.2、案例
1)案例1:简单判断
创建1.sh,内容如下,用来判断2个参数大小
#!/bin/bash
if [ $1 -gt $ $2 ]
then
echo "true"
else
echo "false"
fi
运行文件如下
root@ubuntu:~# ./1.sh 2 5
false
root@ubuntu:~# ./1.sh 10 5
true
root@ubuntu:~#
###2)案例2:复合条件判断
创建2.sh,内容如下,脚本有3个参数,判断:参数1>参数2个 && 参数2 > 参数3
#!/bin/bash
if [ $1 -gt $2 ] && [ $2 -gt $3 ]
then
echo "true"
fi
运行结果如下
root@ubuntu:~# ./2.sh 1 2 3
root@ubuntu:~# ./2.sh 3 2 1
true
root@ubuntu:~#
root@ubuntu:~#
root@ubuntu:~#
root@ubuntu:~#
3)案例3:多条件判断
创建3.sh,内容如下,这个脚本会根据用户输入的第1个参数,输出对应的结果
if [ $1 = "a" ]; then
echo "java"
elif [ $1 = "b" ]; then
echo "php"
else
echo "linux"
fi
运行结果如下
root@ubuntu:~#
root@ubuntu:~# ./3.sh a
java
root@ubuntu:~# ./3.sh b
php
root@ubuntu:~# ./3.sh c
linux
root@ubuntu:~# ./3.sh "xxx"
linux
root@ubuntu:~#
6.2、case语句
6.2.1、语法
case $变量名 in
"值 1")
如果变量的值等于值 1, 则执行程序 1
;;
"值 2")
如果变量的值等于值 2, 则执行程序 2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值, 则执行此程序
;;
esac
6.2.2、注意事项
- case 行尾必须为单词“in” , 每一个模式匹配必须以右括号“) ” 结束
- 双分号“;;” 表示命令序列结束, 相当于 java 中的 break
- 最后的“*) ” 表示默认模式, 相当于 java 中的 default
6.2.3、案例
需求:输入一个数字,如果是1,则输出java,如果是2,则输出php,否则,输出linux。
创建case.sh,内容如下
#!/bin/bash
case $1 in
"1")
echo "java"
;;
"2")
echo "php"
;;
*)
echo "linux"
esac
执行结果如下
root@ubuntu:~# ./case.sh 1
java
root@ubuntu:~# ./case.sh 2
php
root@ubuntu:~# ./case.sh 3
linux
root@ubuntu:~# ./case.sh 5555
linux
root@ubuntu:~#
6.4、for循环
6.4.1、语法1
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
6.4.2、案例:计算从1加到100
#!/bin/bash
sum=0;
for((i=1;i<=100;i++))
do
sum=$[$sum+$i]
done
echo "计算结果===>"$sum
执行for1.sh
[root@localhost ~]# ./for1.sh
计算结果===>5050
[root@localhost ~]# ./for1.sh
计算结果===>5050
6.4.3、语法2
for 变量 in 值1 值2 值3…
do
程序
done
6.4.4、案例
创建for2.sh,内容如下
#!/bin/bash
for i in "java" "springboot" "linux"
do
echo "技术 ==> $i"
done
运行for2.sh
[root@localhost ~]# ./for2.sh
技术 ==> java
技术 ==> springboot
技术 ==> linux
[root@localhost ~]#
6.4.5、比较$*
和$@
区别
$*
和$@
都表示传递给函数或脚本的所有参数, 不被双引号""
包含时, 都以$1 $2 …$n
的形式输出所有参数。
创建vi for3.sh ,内容如下
#!/bin/bash
echo "========$*======="
for i in $*
do
echo "参数:$i"
done
echo "========$@======="
for i in $@
do
echo "参数:$i"
done
执行结果如下
[root@localhost ~]# ./for3.sh 1 2 3 3 4
===========1 2 3 3 4===========
参数:1
参数:2
参数:3
参数:3
参数:4
==========1 2 3 3 4==========
参数:1
参数:2
参数:3
参数:3
参数:4
[root@localhost ~]#
当它们被双引号“”
包含时, $*
会将所有的参数作为一个整体, 以“$1 $2 …$n”
的形式输出所有参数; $@
会将各个参数分开, 以“$1” “$2”…“$n”
的形式输出所有参数
创建vi for4.sh ,内容如下
#!/bin/bash
echo "========$*======="
for i in "$*"
do
echo "参数:$i"
done
echo "========$@======="
for i in "$@"
do
echo "参数:$i"
done
如下,输入3个参数,测试效果,$*
的for只输出了一次,而$@
输出了3次,这就是区别
[root@test001 shells]# ./for4.sh java linux js
========java linux js=======
参数:java linux js
========java linux js=======
参数:java
参数:linux
参数:js
6.5、while循环
6.5.1、语法
while [ 条件判断式 ]
do
程序
done
6.5.2、案例:计算从1加到100
创建while.sh,内容如下
#!/bin/bash
sum=0
i=1
while [ $i -le 100 ]
do
sum=$[$sum+$i]
i=$[$i+1]
done
echo "结果:$sum"
执行while.sh
[root@test001 shells]# chmod +x while.sh
[root@test001 shells]# ./while.sh
结果:5050