shell 脚本语法简介

一、条件测试

测试命令

shell脚本中测试是用命令来完成的,常见的测试命令包含 test 或 [ ,通过检查该类命令的退出码,决定条件测试是否成立。
test举例如下:
shell 脚本语法简介_第1张图片
可以发现,等于100返回的是0,和我们的认知有点不同。
注意:shell认为: 退出码为0,测试条件成立,非0,测试条件不成立。

测试类型

shell脚本测试可以用来测试不同的类型,应用于不同的测试场景。
常见测试选项如下:
1.整数测试:-eq(等与) -ne(不等与) -lt(小于) -gt(大于) -le(小于等于) -ge(大于等于)
2.字符串测试: ==(=) != -z -n
3.文件测试:-d -f -b -c

测试整数

测试整形只能用测试整形的选项,不能用==这些。
举例如下:
shell 脚本语法简介_第2张图片
shell 脚本语法简介_第3张图片

测试字符串

举例如下:
shell 脚本语法简介_第4张图片
shell 脚本语法简介_第5张图片
hello是相等的,测试不相等的,比如world。
shell 脚本语法简介_第6张图片
但是,有一种情况要注意:空字符串比较,如下:
shell 脚本语法简介_第7张图片
第四行报错。因为若是空串,比较时左侧为空,可以如下比较:
shell 脚本语法简介_第8张图片
这是推荐做法,前各加一个相同的字符。

测试文件

-c (字符设备) -d (块设备) -f(普通文件) -d(目录)
举例如下:
shell 脚本语法简介_第9张图片

多条件测试

  1. 和C语言类似,测试条件之间还可以做与、或、非逻辑运算,带与、或、非的测试命令格式如下:
    例如: 逻辑反
    shell 脚本语法简介_第10张图片
    这里写图片描述
    逻辑与:
    shell 脚本语法简介_第11张图片
    shell 脚本语法简介_第12张图片
    逻辑或:
    shell 脚本语法简介_第13张图片
    shell 脚本语法简介_第14张图片
  2. if/then/elif/else/fi
    上面的若干条件判断命令,只能判断出条件真或者假,但是在实际应用中,判断出真假只是第一步,我们还要根据判断结果来进行语句分流。
    shell 脚本语法简介_第15张图片
    注意:如果两条命令写在同一行则需要用分号(;)隔开。
  3. 嵌套
    举例如下:
    shell 脚本语法简介_第16张图片
    看结果:
    shell 脚本语法简介_第17张图片
    if命令的参数组成一条子命令,如果该子命令的Exit Status为0(表示真),则执行then后面的子命令,如果Exit Status非 0(表示假),则执行elif、else或者fi后面的子命令。
    if后面的子命令通常是测试命令,但也可以是其它命令。
    (对这个表达式的要求是:表达式必须要有退出码。这是因为if命令的分流标准就是根据后面的退出码)
  4. ||和&&
    Shell还提供了&&和||语法,和C语言类似,具有Short-circuit(懒逻辑)特性,很多Shell脚本喜欢写成这样。
    测试1:
    shell 脚本语法简介_第18张图片
    测试2:
    shell 脚本语法简介_第19张图片
    &&相当于“if…then…”,而||相当于“if not…then…”。&&和||用于连接两个命令,而上面讲的-a和-o仅用于在测试表 达式中连接两个测试条件,要注意它们的区别。

  5. case/esac
    case命令可类比C语言的switch/case语句,esac表示case语句块的结束。
    C语言的case只能匹配整型或字符型常量表 达式,而Shell脚本的case可以匹配字符串和Wildcard,每个匹配分支可以有若干条命令,末尾必须以;;结束,执行时找到第一个匹配的分支并执行相应的命令,然后直接跳到esac之后,不需要像C语言一样用break跳出。
    来看例子:
    shell 脚本语法简介_第20张图片
    结果:
    shell 脚本语法简介_第21张图片

二、循环语句

1、类C循环

#!/bin/bash
for ((i=0; i<=10; i++)) 
do    
echo "hello $i" 
done

2、for ..in循环

#!/bin/bash
for i in {1,2,3,4}
do    
    echo "hello $i"
done

或者:

#!/bin/bash
for i in {1..10} 
do    
    echo "hello $i" 
done 

3、while循环

#!/bin/bash
i=0 
while [ $i -le 5 ] 
do  
    echo "hello $i"  
    let i++ 
done 

4、until循环

#!/bin/bash
i=0 
until [ $i -ge 10 ]
do  
    echo "hello $i"  
    let i++
done 
死循环

1、类C循环:

#!/bin/bash
for (( ; ; ))
do 
     echo "hello bit"
done 

2、while循环

#!/bin/bash

while : 
do  
    echo "hello bit" 
done 
或者 
#!/bin/bash
while true 
do  
    echo "hello bit" 
done

3、until循环

#!/bin/bash
until false 
do  
     : #空语句,什么也不做
done

命令行循环

命令行循环就是将写在shell脚本中的语句写到命令行,写法完全一样。

i=0; while [ $i -le 10 ]; do echo "hello bit $i"; let i++; done 

你可能感兴趣的:(shell)