笔记簿
ᴄᴏᴅɪɴɢ ɪs ᴀʀᴛ
首页
关于
搜索
登录
注册
Shell 流程控制 - shell中的if case for while
### 流程控制 #### if判断 ##### 1.基本语法 ```shell if [ 条件判断式 ];then 程序 fi 或者 if [ 条件判断式 ] then 程序 fi ```
注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
##### 2.案例 ```text 输入一个数字,如果是1,则输出a,如果是2,则输出b,如果是其它,什么也不输出 #!/bin/bash if [ $1 -eq "1" ] then echo "a" elif [ $1 -eq "2" ] then echo "b" fi ``` #### case语句 ##### 1.基本语法 ```text case $变量名 in "值1") 如果变量的值等于值1,则执行程序1 ;; "值2") 如果变量的值等于值2,则执行程序2 ;; …省略其他分支… *) 如果变量的值都不是以上的值,则执行此程序 ;; esac ```
注意事项:
1). case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
2). 双分号“;;”表示命令序列结束,相当于java中的break。
3). 最后的“*)”表示默认模式,相当于java中的default。
##### 2.案例 ```text 输入一个数字,如果是1,则输出A,如果是2,则输出B,如果是其它,输出C !/bin/bash case $1 in "1") echo "A" ;; "2") echo "B" ;; *) echo "C" ;; esac ``` #### for 循环 ##### 1.基本语法一 ```text for (( 初始值;循环控制条件;变量变化 )) do 程序 done ``` ##### 2.案例一 ```text 从1加到100 #!/bin/bash s=0 for((i=0;i<=100;i++)) do s=$[$s+$i] done echo $s ``` ##### 3.基本语法二 ```text for 变量 in 值1 值2 值3… do 程序 done ``` ##### 4.案例二 ```text 打印所有输入参数 #!/bin/bash for i in $* do echo $i done #或者 #!/bin/bash for i in $@ do echo $i done ```
注意:比较$*和$@区别
1. $*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n的形式输出所有参数。
2. 当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “$2”…”$n”的形式输出所有参数
```text #!/bin/bash for i in "$*" #$*中的所有参数看成是一个整体,所以这个for循环只会循环一次 do echo "this is $i" done for j in "$@" #$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次 do echo "this is $j" done lynn@promptness ~ % chmod 777 for.sh lynn@promptness ~ % bash for.sh a b c this is a b c this is a this is b this is c ``` #### while 循环 ##### 1.基本语法 ```text while [ 条件判断式 ] do 程序 done ``` ##### 2.案例 ```text 从1加到100 #!/bin/bash s=0 i=1 while [ $i -le 100 ] do s=$[$s+$i] i=$[$i+1] done echo $s ```