Java充电社
专辑
博文
联系我
本人继续续收门徒,亲手指导
Shell专题第7篇:流程控制(重点)(if/case/for/while)
相关专辑:
Shell专题
<div style="display:none"></div> ## 7.1、if判断 ### 7.1.1、语法 #### 1)单分支 ```shell if [ 条件判断式 ];then 程序 fi ``` 或 ```shell if [ 条件判断式 ] then 程序 fi ``` #### 2)多分支 ```shell if [ 条件判断式 ] then 程序 elif [ 条件判断式 ] then 程序 else 程序 fi ``` **注意事项:** - [ 条件判断式 ], 中括号和条件判断式之间必须有空格 - if 后要有空格 ### 7.1.2、案例 #### 1)案例1:简单判断 创建1.sh,内容如下,用来判断2个参数大小 ```shell #!/bin/bash if [ $1 -gt $2 ] then echo "true" else echo "false" fi ``` 运行 1.sh,并附带参数 ```shell [root@test001 shells]# chmod +x 1.sh [root@test001 shells]# ./1.sh 10 5 true [root@test001 shells]# ./1.sh 10 20 false ``` #### 2)案例2:复合条件判断 创建2.sh,内容如下,脚本有3个参数,判断:`参数1>参数2个 && 参数2 > 参数3` ```shell #!/bin/bash if [ $1 -gt $2 ] && [ $2 -gt $3 ] then echo "$1>$2,$2>$3" fi ``` 运行 2.sh,并附带参数 ```shell [root@test001 shells]# chmod +x 1.sh [root@test001 shells]# ./2.sh 3 2 1 3>2,2>1 [root@test001 shells]# ./2.sh 3 2 10 ``` #### 3)案例3:多条件判断 创建3.sh,内容如下,这个脚本会根据用户输入的第1个参数,输出对应的结果 ```shell #!/bin/bash if [ $1 = "a" ]; then echo "java" elif [ $1 = "b" ]; then echo "php" else echo "linux" fi ``` 测试 ```shell [root@test001 shells]# ./3.sh a java [root@test001 shells]# ./3.sh b php [root@test001 shells]# ./3.sh c linux [root@test001 shells]# ./3.sh xxxx linux ``` ## 7.2、case语句 ### 7.2.1、语法 ```shell case $变量名 in "值 1") 如果变量的值等于值 1, 则执行程序 1 ;; "值 2") 如果变量的值等于值 2, 则执行程序 2 ;; …省略其他分支… *) 如果变量的值都不是以上的值, 则执行此程序 ;; esac ``` ### 7.2.2、注意事项 - case 行尾必须为单词“in” , 每一个模式匹配必须以右括号“) ” 结束 - 双分号“;;” 表示命令序列结束, 相当于 java 中的 break - 最后的“*) ” 表示默认模式, 相当于 java 中的 default ### 7.2.3、案例 需求:输入一个数字,如果是1,则输出java,如果是2,则输出php,否则,输出linux。 创建case.sh,内容如下 ```shell #!/bin/bash case $1 in "1") echo "java" ;; "2") echo "php" ;; *) echo "linux" ;; esac ``` 测试效果 ```shell [root@test001 shells]# chmod +x case.sh [root@test001 shells]# ./case.sh 1 java [root@test001 shells]# ./case.sh 2 php [root@test001 shells]# ./case.sh x linux ``` ## 7.4、for循环 ### 7.4.1、语法1 ```shell for (( 初始值;循环控制条件;变量变化 )) do 程序 done ``` ### 7.4.2、案例:计算从1加到100 创建for1.sh,内容如下 ```shell #!/bin/bash sum=0; for((i=1;i<=100;i++)) do sum=$[$sum+$i] done echo "结果:"$sum ``` 执行for1.sh ```shell [root@test001 shells]# chmod +x for1.sh [root@test001 shells]# ./for1.sh 结果:5050 ``` ### 7.4.3、语法2 ```shell for 变量 in 值1 值2 值3… do 程序 done ``` ### 7.4.4、案例 创建for2.sh,内容如下 ```shell #!/bin/bash for i in "java" "Spring Boot" "Linux" do echo "技术:$i" done ``` 运行 ```shell [root@test001 shells]# chmod +x for2.sh [root@test001 shells]# ./for2.sh 技术:java 技术:Spring Boot 技术:Linux ``` ### 7.4.5、比较$*和$@区别 $*和$@都表示传递给函数或脚本的所有参数, 不被双引号“”包含时, 都以$1 $2 …$n的形式输出所有参数。 **创建vi for3.sh ,内容如下** ```shell #!/bin/bash echo "========$*=======" for i in $* do echo "参数:$i" done echo "========$@=======" for i in $@ do echo "参数:$i" done ``` **运行** ```shell [root@test001 shells]# chmod +x for3.sh [root@test001 shells]# ./for3.sh java linux js ========java linux js======= 参数:java 参数:linux 参数:js ========java linux js======= 参数:java 参数:linux 参数:js ``` 当它们被双引号“”包含时, $*会将所有的参数作为一个整体, 以“$1 $2 …$n”的形式输出所有参数; $@会将各个参数分开, 以“$1” “$2”…“$n”的形式输出所有参数 **创建vi for4.sh ,内容如下** ```shell #!/bin/bash echo "========$*=======" for i in "$*" do echo "参数:$i" done echo "========$@=======" for i in "$@" do echo "参数:$i" done ``` **如下,输入3个参数,测试效果,$*的for只输出了一次,而$@输出了3次,这就是区别** ```shell [root@test001 shells]# ./for4.sh java linux js ========java linux js======= 参数:java linux js ========java linux js======= 参数:java 参数:linux 参数:js ``` ## 7.5、while循环 ### 7.5.1、语法 ```shell while [ 条件判断式 ] do 程序 done ``` ### 7.5.2、案例:计算从1加到100 创建while.sh,内容如下 ```shell #!/bin/bash sum=0 i=1 while [ $i -le 100 ] do sum=$[$sum+$i] i=$[$i+1] done echo "结果:$sum" ``` 执行for1.sh ```shell [root@test001 shells]# chmod +x while.sh [root@test001 shells]# ./while.sh 结果:5050 ``` <a style="display:none" target="_blank" href="https://mp.weixin.qq.com/s/_S1DD2JADnXvpexxaBwLLg" style="color:red; font-size:20px; font-weight:bold">继续收门徒,亲手带,月薪 4W 以下的可以来找我</a> ## 最新资料 1. <a href="https://mp.weixin.qq.com/s?__biz=MzkzOTI3Nzc0Mg==&mid=2247484964&idx=2&sn=c81bce2f26015ee0f9632ddc6c67df03&scene=21#wechat_redirect" target="_blank">尚硅谷 Java 学科全套教程(总 207.77GB)</a> 2. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484192&idx=1&sn=505f2faaa4cc911f553850667749bcbb&scene=21#wechat_redirect" target="_blank">2021 最新版 Java 微服务学习线路图 + 视频</a> 3. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484573&idx=1&sn=7f3d83892186c16c57bc0b99f03f1ffd&scene=21#wechat_redirect" target="_blank">阿里技术大佬整理的《Spring 学习笔记.pdf》</a> 4. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484544&idx=2&sn=c1dfe907cfaa5b9ae8e66fc247ccbe84&scene=21#wechat_redirect" target="_blank">阿里大佬的《MySQL 学习笔记高清.pdf》</a> 5. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247485167&idx=1&sn=48d75c8e93e748235a3547f34921dfb7&scene=21#wechat_redirect" target="_blank">2021 版 java 高并发常见面试题汇总.pdf</a> 6. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247485664&idx=1&sn=435f9f515a8f881642820d7790ad20ce&scene=21#wechat_redirect" target="_blank">Idea 快捷键大全.pdf</a> ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/1/2883e86e-3eff-404a-8943-0066e5e2b454.png)
相关专辑:
Shell专题