【1】shell中的语句

1)说明性语句

  1. 以**#**号开始到该行结束,不被解释执行<br /> #!/bin/bash 告诉操作系统使用哪种类型的shell执行此脚本文件

2)功能性语句

    任意的shell命令、用户程序或其它shell程序。

3)结构性语句

**条件测试语句**、**多路分支语句**、**循环语句**、**循环控制语句**等**    ** 

【2】功能性语句

1.read

类似C中的scanf<br />    read  var1  var2  var3<br />    把读入行中的第一个单词(word)赋给var1, 第二个单词赋给var2,<br />    ……把其余所有的词赋给最后一个变量.<br />    <br />    **read -p** "字符串" 变量列表:可以打印出字符串,并从终端输入      <br />   

2.expr

算术运算命令expr主要用于进行简单的整数运算,包括加(**+**)、减(**-**)、乘(**\***)、整除(**/**)和求模(**%**)等操作<br />    如:expr \( 12 + 3 \) \* 2<br />        NUM=`expr 12 + 3`  :将运算的结果赋值给变量<br />    注意:<br />      **1) **运算符左右两侧必须有空格<br />      **2) ***和**( )**必须加转义字符,**\***  、 **\(     \)**<br />      **3) **expr语句可以直接输出运算结果<br />      

4.let

  在运算中不能有空格<br />      **运算结果需要赋给一个变量**<br />      变量参与运算的过程**不用**加**$**取值<br />    如:<br />      Let r=(1+3)*2<br />      Let r+=1   //   ((r++))

练习:计算表达式值a*b+c-d/b;
要求:
1)从终端读入4个数a,b,c,d;a=2,b=3,c=15,d=18
2)进行运算
3)打印结果输出到终端

5.test:

test语句可测试三种对象:<br />          字符串     整数     文件属性<br />    每种测试对象都有若干测试操作符

1)字符串的测试:

    **s1 = s2**     测试两个字符串的内容是否完全一样<br />        **s1 != s2**    测试两个字符串的内容是否有差异<br />        **-z s1**         测试s1 字符串的长度是否为0<br />        **-n s1**         测试s1 字符串的长度是否不为0

2)整数的测试:

    **a -eq b**         测试a 与b 是否相等<br />        **a -ne b**            测试a 与b 是否不相等<br />        **a -gt b**         测试a 是否大于b<br />        **a -ge b**         测试a 是否大于等于b<br />        **a -lt b**         测试a 是否小于b<br />        **a -le b**         测试a 是否小于等于b    

3)文件属性的测试;

    **-d name**         测试name 是否为一个目录<br />        **-f name**         测试name 是否为普通文件<br />        **-e name**         测试文件是否存在<br />    如: <br />        test $VAR = "hello"<br />        echo $?<br />        test $NUM -eq 100<br />        echo $?<br />        test -d $FILE<br />        echo $?    <br />        

【3】shell中结构性语句

1.if…then…fi

1)基本结构:

    if    表达式<br />        then  <br />            命令表<br />        fi     

2)分层结构:

    if      表达式<br />        then <br />            命令表1<br />        else  <br />            命令表2<br />        fi

3)嵌套结构:

    if      表达式<br />        then <br />            命令表1<br />        else  <br />            if    表达式<br />            then  <br />                命令表<br />            fi  <br />        fi

4)elif

    if   表达式1<br />        then <br />            命令表1<br />        elif 表达式2 <br />         then        <br />            命令表2<br />        elif 表达式3<br />         then<br />           命令表3<br />           ...<br />        else <br />           命令表n<br />        fi<br />    <br />    注意:<br />        如果表达式为真, 则执行命令表中的命令; 否则退出if语句, <br />      即执行fi后面的语句。 <br />        **if**和**fi**是条件语句的语句括号, 必须成对使用;<br />        命令表中的命令可以是一条, 也可以是若干条。<br />        

【4】case语句

case   字符串变量   in<br />        模式1)<br />                命令表1<br />                ; ;<br />        模式2)<br />                命令表2<br />                ; ;<br />             ……<br />        模式n)<br />                命令表n<br />                ; ;<br />    esac<br />    注意:<br />        **1)**case语句只能检测**字符串变量**<br />        **2)**命令表以单独的**双分号行**结束,退出case语句<br />        **3)**模式 n常写为字符***** 表示所有其它模式<br />        **4)**case匹配项中可以存在多个模式,每种模式之间用 **|** 隔开    <br />    补充:<br />    逻辑运算符的书写格式:<br />    **|| :**逻辑或  <br />        [ 表达式1 ] || [ 表达式1 ] <br />        [ 表达式1 -o 表达式1 ]<br />    **&& :**逻辑与 <br />        [ 表达式1 ] && [ 表达式1 ] <br />        [ 表达式1 -a 表达式1 ]<br />    **!  :**逻辑非 <br />        [ ! 表达式 ]<br />    <br />练习:学生成绩管理系统,用shell中的case实现<br />    90-100:A<br />    80-89:B<br />    70-79:C<br />    60-69:D<br />    <60:不及格    

【5】for..do..done

格式:<br />        for   变量名   in   单词表<br />        do<br />            命令表<br />        done

变量依次取单词表中的各个单词, 每取一次单词, 就执行一次
循环体中的命令. 循环次数由单词表中的单词数确定. 命令表中的
命令可以是一条, 也可以是由分号或换行符分开的多条。

for语句的几种书写格式:<br />    **1)**for i in 1 2 3 4  do....done :<br />        变量i从单词表中取值<br />    **2)**for i  do...done:<br />        变量i从命令行取值,可以省略in 单词表<br />    **3)**for i in {1..10} do...done:<br />        变量i从1-10个数中取值<br />    **4)**for ((i = 0; i < 10; i++)) do...done:<br />        书写格式类似c语言    <br />        <br />练习1:1-10求和运算<br />练习2:判断当前路径下是否存在目录aa,如果不存在创建;<br />       如果命令行有一个参数且为文件名,<br />    判断是否是当前路径下的文件,如果是打印语句:“文件已找到”并且退出;<br />   如果命令行参数个数不为1,遍历当前路径下的文件,<br />   将当前路径下的普通文件复制到aa目录中。

【6】while循环

格式:<br />        while  命令或表达式<br />        do<br />            命令表<br />        done<br />    while语句首先测试其后的命令或表达式的值,如果为真,就执行一次<br />    循环体中的命令,然后再测试该命令或表达式的值,执行循环体,直到该<br />    命令或表达式为假时退出循环<br />    

【7】until循环

格式:    <br />        until   命令或表达式<br />        do<br />            命令表<br />        done<br />    until循环与while循环的功能相似, 不同的是只有当测试的命令或<br />    表达式的值是假时, 才执行循环体中的命令表, 否则退出循环. <br />    这一点与while命令正好相反.    <br />    

【8】循环控制语句:break和continue

**break:**结束本次循环<br />        **break  n:**  则跳出**n**层;      <br />    **continue:**结束本次循环继续下次循环<br />        **continue  n** 则转到最近**n**层循环语句的下一轮循环上.

【9】shell数组

1.数组的定义及初始化

**1)**arr=(v1 v2 v3 v4)<br />    **2)**arr=($1 $2 $3 $4)<br />    **3)**read a b c <br />       arr=($a $b $c)<br />    **4)**read -a 数组名<br />    

2.访问数组

**1)**取数组某个元素<br />        ${数组名[下标]}  0 <br />    **2)**对数组元素的值进行修改<br />        数组名[下标]=值<br />    **3)**遍历数组<br />        ${数组名[@]}<br />    **4)**获取数组元素个数<br />        ${#数组名[@]}

【10】shell函数

1.函数的定义方式:

**1)**function_name ( )<br />    {<br />        command1<br />            ……<br />        commandn<br />    }<br />    **2)**function   function_name ( )<br />    {<br />        command1<br />            ……<br />        commandn<br />    }

2.函数的调用方式:

**1)**value_name=`function_name  [arg1 arg2 … ]`<br />    **2)**function_name  [arg1  arg2  …  ]

3.注意:

**1)**当函数中有**return**时,可以使用**$?**打印函数的返回值<br />    **2)**如果没有**return**,且函数中的变量为全局变量时,可以直接打印<br />    变量的值<br />    **3)**可以在函数调用时给函数传参,在函数中通过$1\$2...来接受参数<br />        FUN(){  let num=$1+$2}<br />        FUN 2 3<br />    **4)**函数调用时可以val=`function_name  [arg1 arg2 … ]`,这时候<br />    函数的所有标准输出都传递给了主程序的变量