Shell脚本语法3.21

1.数值运算

  表达式中,数字和运算符之间要有空格,出现在语句中要加反引号

  a=11 b=22

(1)   加:dd=$(exper $a + $b)运算符两边必须有空格

       Let c=$a+$b

       c=$[$a+$b]

       c=$(($a+$b))

       c=`expr $a + $b`

乘:expr 1 \* 3

例:echo `expr 1 + 3`

(2) 两种运行方式的不同

1>  sh hello.sh 不会获取脚本中的变量

2>  source hello.sh会获得脚本中的变量

2.条件判断命令 test

  真返回0,假返回1

(1) 整数,比较运算符

-lt 小于

-le 小于等于

-gt 大于

-ge 大于等于

-eq 等于

-ne 不等于

  例:test 1 –lt 4 判断1<4

      echo $? 判断上条语句的执行结果

 等价形式 [ 1 –lt 4 ]

(2) 文件测试

-e 文件存在为真

-f 存在且是普通文件

-d 存在且是目录

-s 存在且字节数大于零

-r 存在且可读

-w 存在且可写

-x 存在且可执行

  例:判断mydoc是否有目录

      test –d “mydoc”

(3) 字符串测试

test s 字符串s非空

    test s1 = s2 判断s1=s2(等号两边加空格)

    test s1 != s2 判断s1不等于s2

    test –z s 判断s的长度为0,即空串

    test –n s 判断s长度>0

(4) 其他参数

-a 逻辑与

-o 逻辑或

! 逻辑非

3. 控制流程

   (1)if 语句,if [判断];then (写在一行) if与判断之间一定有空格

      例: if [ $# -eq 0 ]

           then

              echo “输入了0个参数”

           elif [ $# -gt 1 ]

           then echo “输入了多个参数”

           else echo “输入了1个参数”

           fi

(3)case语句

每个分支条件后必须以两个分号结尾

      case $变量名称 in

          “第一个变量内容”) 程序段;;

          “第二个变量内容) 程序段;;

                       *) exit 1;;  (*表示其他值)

     esac

例:case “$#”in

0)  echo “输入了0个参数”;;

1)  echo “输入了1个参数”;;

*)echo “输入了多个参数”;;

          esac

(4)循环结构

1>for i in {1..9}大括号中不能有变量

for i in `seq 1 9` (seq命令:产生1-9的数字序列)

do

    echo `expr $i \* 10` (echo $(expr $i \* 10))

done

     2> while 语句

        while [判断]

       do

           程序段

       done

       until [判断]

       do

          程序段

       done

        例:求1到100的和

         i=1

         sum=0

         while [ $i –le 100 ]

         do

           sum=$[$sum+$i]

           i=$[$i+1]

         done (表示结束)

         echo $sum

      break和continue可以接受参数

      break 2 表示跳出两层循环

 3> forvar in con1 con2 con3 …

     do

        程序段

     done

     for((初始值;限制值;运行步阶))

     do

       程序段

     done

4.函数的定义

 1> 定义格式:

    函数名 (){

    命令1

    . . .

}

2>所有函数在使用前必须定义,放在脚本的开始部分

3>调用时仅使用函数名即可

4>参数可以传递给函数

  fname arg1 arg2

  fname()

  {

   echo $1,$2; 访问参数1和参数2

   echo “$@”; 以列表的方式一次性打印所有参数

   echo “$*”; 类似于$@,参数被作为单个实体

   return 0;

}

5> -p:指定读取值时的提示符;

read–p“please intput a num:”num

可以从键盘上读取多个变量的值,用户输入数据时,以空格或者Tab键作为分隔。

如果输入的数据个数不够,则从左到右对应赋值,没有输入的变量为空;

如果输入的数据个数超了,则从左到右对应赋值,最后一个变量被赋予剩余的所有数据。

5.数组

 (1) 数组定义

    array_var=(1 2 3 4 5 6) (索引从0开始)

    索引-值方式:

    array_var[0]=”test1”

     array_var[1]=”test2”

     array_var[2]=”test3”

     array_var[3]=”test4”

 (2) 打印出特定索引值的数组元素内容

      echo${array_var[$index]}

 (3)以清单的形式打印出所有值

    echo ${array_var[*]}

    echo ${array_var[@]}

 (4)打印数组长度

    echo ${#array_var[*]}

6.关联数组

 可以用任何字符作为下标,使用前用declare –Aarray进行声明

 ${!array[*]} 取关联数组所有键

${!array[@]}取关联数组所有键

${array[*]}取关联数组所有值

${array[@]} 取关联数组所有值

${#array[*]}关联数组的长度

${#array[@]}关联数组的长度

猜你喜欢

转载自blog.csdn.net/weixin_41661222/article/details/79646428