6、流程控制(重点)


尚硅谷2022版Linux扩展篇Shell教程-讲师:武晟然

壁立千仞 无欲则刚

6、流程控制(重点)

6.1 if 判断

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

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

或者

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

(2)多分支

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

注意事项:
①[ 条件判断式 ],中括号和条件判断式之间必须有空格
②if 后要有空格
2)案例实操
输入一个数字,如果是 1,则输出 one,如果是 2,则输出 tow,
如果是其它,输出number。

[root@centos7-101 scripts]# touch if.sh
[root@centos7-101 scripts]# vim if.sh 
#!/bin/bash
if [ $1 -eq 1 ]
then
echo "one"
elif [ $1 -eq 2 ]
then
echo "tow"
else
echo "number"
fi

[root@centos7-101 scripts]# chmod u+x if.sh 
[root@centos7-101 scripts]# ./if.sh 1
one

问题
如果不输入参数就会报错

[root@centos7-101 scripts]# ./if.sh
./if.sh: 第 2 行:[: -eq: 期待一元表达式
./if.sh: 第 5 行:[: -eq: 期待一元表达式
number

解决

#!/bin/bash
if [ "$1"x = "1"x ]
then
echo "one"
elif [ "$1"x = "2"x ]
then
echo "tow"
else
echo "number"
fi

6.2 case 语句

1)基本语法
case $变量名 in
“值 1”)
如果变量的值等于值 1,则执行程序 1
;;
“值 2”)
如果变量的值等于值 2,则执行程序 2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意事项:
(1)case 行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
(2)双分号“;;”表示命令序列结束,相当于 java 中的 break。
(3)最后的“*)”表示默认模式,相当于 java 中的 default。
2)案例实操
输入一个数字,如果是 1,则输出 one,如果是 2,则输出 tow,如果是其它,输出number。

[root@centos7-101 scripts]# touch case.sh
[root@centos7-101 scripts]# vim case.sh 
#!/bin/bash
case $1 in
"1")
echo "one"
;;
"2")
echo "tow"
;;
*)
echo "number"
;;
esac

[root@centos7-101 scripts]# chmod u+x case.sh 
[root@centos7-101 scripts]# ./case.sh 1
one
[root@centos7-101 scripts]# ./case.sh 2
tow
[root@centos7-101 scripts]# ./case.sh 3
number

6.3 for 循环

1)基本语法 1
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
2)案例实操
从 1 加到 100

[root@centos7-101 scripts]# touch for1.sh
[root@centos7-101 scripts]# vim for1.sh 
#!/bin/bash
sum=0
# 在双小括号内,可以使用数学上的符号进行数字比较
for((i=0;i<=100;i++))
do
sum=$[$sum+$i]
done
echo $sum

[root@centos7-101 scripts]# chmod u+x for1.sh 
[root@centos7-101 scripts]# ./for1.sh 
5050

3)基本语法 2
for 变量 in 值 1 值 2 值 3…
do
程序
done
4)案例实操
(1)打印所有输入参数

[root@centos7-101 scripts]# touch for2.sh
[root@centos7-101 scripts]# vim for2.sh 
#!/bin/bash
for i in windows linux macos
do
echo "$i"
done

[root@centos7-101 scripts]# chmod u+x for2.sh 
[root@centos7-101 scripts]# ./for2.sh 
windows
linux
macos

(2)比较$*和$@区别

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

[root@centos7-101 scripts]# touch for3.sh
[root@centos7-101 scripts]# vim for3.sh 
#!/bin/bash
echo '==========$*========='
for i in $*
do
echo $i
done
echo '==========$@========='
for i in $@
do
echo $i
done

[root@centos7-101 scripts]# chmod u+x for3.sh 
[root@centos7-101 scripts]# ./for3.sh a b c d e f
==========$*=========
a b c d e f
==========$@=========
a b c d e f

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

[root@centos7-101 scripts]# vim for3.sh 
#!/bin/bash
echo '==========$*========='
#$*中的所有参数看成是一个整体,所以这个 for 循环只会循环一次
for i in $*
do
echo $i
done
echo '==========$@========='
#$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
for i in $@
do
echo $i
done

[root@centos7-101 scripts]# ./for3.sh a b c d e f
==========$*=========
a b c d e f
==========$@=========
a b c d e f

6.4 while 循环

1)基本语法
while [ 条件判断式 ]
do
程序
done
2)案例实操
从 1 加到 100

[root@centos7-101 scripts]# touch while.sh
[root@centos7-101 scripts]# vim while.sh 
#!/bin/bash
sum=0
i=1
while [ $i -le 100 ]
do
sum=$[$sum+$i]
i=$[$i+1]
# len a++
done
echo $sum

[root@centos7-101 scripts]# chmod u+x while.sh 
[root@centos7-101 scripts]# ./while.sh 
5050
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值