文章目录
- Shell中的流程控制(if/case/for/while)
 - 1 if判断
 - 1.1 单分支
 - 1.2 多分支
 
- 2. case语句
 - 3 for循环
 - 3.1 第一种写法 (())
 - 3.2 第二种写法 in
 
- 4 while循环
 - 4.1 demo1
 - 4.2. demo2测试let
 
Shell中的流程控制(if/case/for/while)

1 if判断
1.1 单分支
1)第一种写法:
if [ 条件判断式 ];then
 程序
fi
2)第二种写法:
if [ 条件判断式 ]
then
 程序
fi
- if后要有空格
 - [ 条件判断式 ],中括号和条件判断式之间必须有空格
 
[root@localhost home]# cd /home/jiaoben/; ls -l
总用量 16
-rw-r--r--. 1 root root  27 6月  27 23:38 hello.sh
-rwxr-xr-x. 1 root root  52 6月  28 22:05 parameter.sh
-rw-r--r--. 1 root root 450 6月  29 00:03 para.sh
-rw-r--r--. 1 root root 323 6月  29 23:58 sum.sh
[root@localhost jiaoben]# num=18
[root@localhost jiaoben]# if [ $num -gt 16 ]; then echo "$a大于16"; fi
25大于16
[root@localhost jiaoben]# num=15
[root@localhost jiaoben]# if [ $num -gt 16 ]; then echo "$a大于16"; fi
[root@localhost jiaoben]#
 
- 条件判断-a, -o
 
-a 相当于and
-o 相当于or
[root@localhost jiaoben]# num=25
[root@localhost jiaoben]# if [ $num -gt 20 ] && [ $num -lt 30 ]; then echo ok; fi
ok
[root@localhost jiaoben]# if [ $num -gt 20 -a $num -lt 30 ]; then echo ok; fi
ok
[root@localhost jiaoben]# if [ $num -lt 20 -o $num -gt 30 ]; then echo ok; fi
[root@localhost jiaoben]# num=40
[root@localhost jiaoben]# if [ $num -lt 20 -o $num -gt 30 ]; then echo ok; fi
ok
[root@localhost jiaoben]# num=18
[root@localhost jiaoben]# if [ $num -lt 20 -o $num -gt 30 ]; then echo ok; fi
ok
 
- 单分支脚本
 
if_demo1.sh
#!/bin/bash
if [ $1 = kevin ]
then
        echo "welcome, kevin"
fi
 
执行脚本:
[root@localhost jiaoben]# chmod +x if_demo1.sh
[root@localhost jiaoben]# ./if_demo1.sh kevin
welcome, kevin
[root@localhost jiaoben]#
 
1.2 多分支
if [ 条件判断式 ]
then
 程序
elif [ 条件判断式 ]
then
 程序
else
 程序
fi
- if后要有空格
 - [ 条件判断式 ],中括号和条件判断式之间必须有空格
 
if_demo2.sh
#!/bin/bash
if [ $1 -ge 90 ]
then
        echo "成绩优秀"
elif [ $1 -ge 75 -a $1 -lt 90 ]
then
        echo "成绩良好"
elif [ $1 -ge 60 -a $1 -lt 75 ]
then
        echo "成绩及格"
else
        echo "成绩不及格"
fi
 
执行脚本:
[root@localhost jiaoben]# chmod +x if_demo2.sh
[root@localhost jiaoben]# ./if_demo2.sh 93
成绩优秀
[root@localhost jiaoben]# ./if_demo2.sh 80
成绩良好
[root@localhost jiaoben]# ./if_demo2.sh 62
成绩及格
[root@localhost jiaoben]# ./if_demo2.sh 58
成绩不及格
 
2. case语句
case语句写法:
case $变量名 in
“值 1”)
 如果变量的值等于值1,则执行程序1
;;
“值2”)
 如果变量的值等于值2,则执行程序2
;;
 …省略其他分支
*)
 如果变量的值都不是以上的值,则执行此程序
;;
注意:
1)case行尾必须为单词“in”,没一个模式匹配必须以右括号“)”结束
2)双分号“;;”表示命令序列结束,相当于java中的break
3)最后“*)”表示默认模式,相当于java中的default
case_demo.sh
#!/bin/bash
case $1 in
java)
        echo "买了本Java的书籍"
;;
python)
        echo "买了本Python的书"
;;
golang)
        echo "买了本Golang的书"
;;
*)
        echo "================"
;;
esac
 
执行脚本case_demo.sh
[root@localhost jiaoben]# chmod +x case_demo.sh
[root@localhost jiaoben]# ./case_demo.sh java
买了本Java的书籍
[root@localhost jiaoben]# ./case_demo.sh golang
买了本Golang的书
[root@localhost jiaoben]# ./case_demo.sh php
================
 
3 for循环
3.1 第一种写法 (())
for (( 初始值;循环控制条件;变量变化 ))
do
 程序
done
for_demo1.sh
#!/bin/bash
for (( i=1; i<=$1; i++ ))
do
        sum=$[ $sum + $i ]
done
echo $sum
 
执行脚本:
[root@localhost jiaoben]# sh for_demo1.sh 100
5050
 
3.2 第二种写法 in
for 变量 in 值1 值2 值3…
do
 程序
done
- 命令行方式
 
[root@localhost jiaoben]# for book in Java Python Golang; do echo $book; done
Java
Python
Golang
[root@localhost jiaoben]# for i in {1..100}; do sum=$[$sum+$i]; done; echo $sum
5050
[root@localhost jiaoben]#
 
- 脚本
 
for_demo2.sh
#!/bin/bash
for num in $*
do
        echo $num
done
 
执行脚本:
[root@localhost jiaoben]# sh for_demo2.sh 1 2 3 4 5 6 7 8
1
2
3
4
5
6
7
8
 
- 测试 ∗ 和 *和 ∗和@的区别
 
双引号包含时,$*会将所有的参数作为一个整体,以$1 $2 $3 … n 的形式列出所有参数; n的形式列出所有参数; n的形式列出所有参数;@会将各个参数分开
for_demo3.sh
#!/bin/bash
echo '================$*================='
for lanague in $*
do
        echo $lanague
done
echo '================$@================='
for lanague in $@
do
        echo $lanague
done
 
执行脚本:
[root@localhost jiaoben]# ll | grep for_demo3.sh
-rw-r--r--. 1 root root 181 7月   1 23:20 for_demo3.sh
[root@localhost jiaoben]# chmod u+x for_demo3.sh
[root@localhost jiaoben]# ll | grep for_demo3.sh
-rwxr--r--. 1 root root 181 7月   1 23:20 for_demo3.sh
[root@localhost jiaoben]# ./for_demo3.sh Java Python Golang Sql
================$*=================
Java
Python
Golang
Sql
================$@=================
Java
Python
Golang
Sql
 
修改脚本for_demo3.sh
#!/bin/bash
echo '================$*================='
for lanague in "$*"
do
        echo $lanague
done
echo '================$@================='
for lanague in "$@"
do
        echo $lanague
done
 
执行脚本:
[root@localhost jiaoben]# ./for_demo3.sh Java Python Golang Sql
================$*=================
Java Python Golang Sql
================$@=================
Java
Python
Golang
Sql
 
4 while循环
while [ 条件判断式 ]
do
 程序
done
4.1 demo1
while_demo.sh
#!/bin/bash
num=1
while [ $num -le $1 ]
do
        sum=$[ $sum + $num]
        num=$[$num + 1]
done
echo $sum
 
执行脚本:
[root@localhost jiaoben]# sh while_demo.sh 100
5050
 
4.2. demo2测试let
修改while_demo.sh
#!/bin/bash
num=1
while [ $num -le $1 ]
do
        let sum+=num
        let num++
done
echo $sum
 
执行脚本:
[root@localhost jiaoben]# sh while_demo.sh 100
5050
                


















