shell基础语法2018.03.21

一、Shell中的数值运算及运算方式差异

   1.      expr:数值运算工具

   表达式求值:$(expr 运算式)

        $ expr1 + 3

        $ expr2 –1

       $ expr1 \* 3 使用*要加转义符

      $ echo`expr1 + 3`

      注意:表达式中,数值和运算符之间要有空格,出现在表达式中要加反引号

      其他的表达式形式:$((运算式))    $[运算式]

2. 运行方式差异

      当用  sh filename.sh方式运行时,系统会为程序创建子进程,运行完成后,子进程bash内的所有数据便被移除

      当用source filename.sh方式运行时,程序便会在父进程中运行,数据会被保留

二、shell中的判断式及控制流程语句

     1. 条件判断命令test

     test n1 –参数 n2(或 –参数 表达式)  真的返回0,假的返回1

     (1)  整数

      比较运算符

       -lt小于

       -le小于等于

       -gt大于

      -ge大于等于

       -eq等于

      -nq不等于

      test语句的等价表达式  [ 1 –lt 4 ]  注:表达式与中括号间有空格

2. 文件测试

    -f:存在且是普通文件

    -d:存在且是目录

    -s:存在且字节数大于0

    -r:存在且可读

    -w:存在且可写

    -x:存在且可执行

3.字符串测试

   test s   字符串s非空

   test s1 == s2  字符串s1等于s2

   test s1 != s2  字符串s1不等于s2

   test –z       字符串s长为0,即为空串

   test –n       字符串长度>0

3. 其他参数

    -a 逻辑与

    -b 逻辑或

 !逻辑非

三、控制流程

    简单举例:seq命令:产生1-9的数字序列

    1. 分支结构

    If分支:举例如下

       if [ $# -eq0 ]

      then

      echo “输入了0个参数”

      elif[ $# -gt 1 ]

      then echo “输入了多个参数”

     else echo “输入了1个参数”

     fi

 

case分支:举例如下

     case “$#” in

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

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

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

    esac

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

2. 循环结构

  for 例子:

       for i in `seq1 9`

       do

       echo `expr$i\* 10`

      done

或写echo $(expr$i\* 10)

 

注意:如果使用这种方式的for i in{1..10}  在大括号里不能用变量

 

3. read:读取

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

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

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

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

    read–p “please input a num:” num

4.  while

    while例子:求1-100的和

         i=1

        sum=0

        while [ $i–le 100 ]

       do

       sum=$[$sum+$i]

       i=$[$i+1]

      done

      echo $sum

 

      Break和continue命令都可以接受可选的数值参数,可分别用来指出要中断(break)或继续多少个被包含的循环

 

四、shell中的函数

      所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用

 

     参数可以传递给函数,并由脚本进行访问:

fnamearg1 arg2;#传递参数

 

 

五、shell中的数组

    1.一般数组

   可以在单行中使用一列值来定义一个数组:

   array_var=(1 2 3 4 5 6)

 

    另外,还可以将数组定义成一组“索引-值”:

    array_var[0]="test1"

 

    打印出特定索引的数组元素内容:

    echo ${array_var[0]}

    test1

    index=4

    echo ${array_var[$index]}

    test5

 

    以清单形式打印出数组中的所有值:

    echo ${array_var[*]}

    test1 test2 test3 test4 test5

    也可以这样使用

    echo ${array_var[@]}

    test1 test2 test3 test4 test5

 

    打印数组长度:

     echo ${#array_var[*]}

     5

 

2.关联数组

    shell 提供了另外一种数组,其可以使用任意的字符串作为下标(不必是整数)来访问数组元素。这种数组叫做关联数组   (associative array)。

        关联数组的下标和值称为键值对,它们是一一对应的关系。在关联数组中键是唯一的,            值可以不唯一。

 

     需要注意的是,在使用关联数组之前,需要使用命令declare -A array 进行显示声明

   

   

语法                 描述

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

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

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

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

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

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

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值