尚硅谷2022版Linux扩展篇Shell教程-讲师:武晟然
壁立千仞 无欲则刚
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
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
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
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