zoukankan      html  css  js  c++  java
  • shell编程

    变量的作用域

    环境变量=全局变量

    自定义变量=局部变量

       1、全局变量:针对所有模块生效

       2、文件中定义的变量,本模块文件中有效。

       3、 函数内local命令定义的变量,仅函数内有效。

    备注:文件中若想使用其他文件中的变量,需进行导入,命令:

    .文件名 或 source 文件名

    位置变量

    命令行参数允许在运行脚本时向命令行传递参数

    $0-$9,当超过$9后,必须在变量数字周围加花括号,对应关系如下

    #./addem     a     b        c     d    e      f     g     h      i      g        k .....

      $0             $1    $2     $3  $4   $5   $6   $7   $8   $9   ${10}  ${11}...

    $# 位置变量参数个数,从$1开始计算

    $@ 参数列表,将所有位置参数当做同一字符串的多个独立单词,允许遍历。

    $* 参数列表,将所有位置参数当做一个单词保存

    ${!#} 最后一个参数值

    $$  当前进程的进程号

    tips:$@和$*在遍历时一定要使用引号引起来(因为变量内容中内含空格),如果不加引号,遍历时,无区别。

    # ./hi.sh 1 "2 3" 4 

    遍历时不加引号,for循环遍历结果:

    1

    2

    3

    4

    遍历时加引号,for循环遍历结果:

    “$*”方式结果:

    1 2 3 4

    "$@"方式结果:

    2 3

    4

    数组

    数组是可以存储多个值的变量,shell支持一维数组

    数字数组:索引值为数字,相当于python的列表

    关联数组:索引值任意,相当于python的字典

    数字数组

    创建数字数组

    方法1:数组名=(元素1 元素2 元素3...)   #索引默认从0开始

    方法2:数组名=([索引1]=元素值1 [索引2]=元素值2...)

    推荐使用方法1

    访问数组元素 {}方式

    访问所有数组元素

       ${数组名[*]}    #所有元素作为1个元素保存,不允许遍历

       ${数组名[@]}  #所有元素作为独立的元素保存,允许遍历

    访问单个数组元素

       ${数组名[索引值]}

    切片方式访问数组元素

    #mytest=(one two three)

    1.整个数组切片

    ${数组名[@]:start[:offset]}

    #echo ${mytest[@]:1:2}  #索引1开始取

    two three

    2.单个元素内部切片

    ${数组名[索引值]:start[:offset]}

    echo ${mytest[0]:0:2}  

    on

    tips:

         访问数组元素时,必须加{},否则得到的是第一个元素值(echo $数组名)

         普通变量可看作只有一个元素的数组

      hi='hello world'

      echo ${hi[0]}

      hello world

    修改/增加元素

    数组名[索引值]=value

    数组元素个数

    ${#数组名[@]}

    单个数组元素的长度

    ${#数组名[索引值]}

    访问数组最后1个元素

    ${数组名[$(expr ${#数组名[@]} - 1)]}   #红色部分得到最后一个元素的索引值

    数组尾部增加一个元素new

    方法1:数组名=("${数组名[@]}" "new")

    方法2:数组名[${#数组名[@]}]="new"

    数组也支持变量内容替换、删除等操作

    eg:

    #mytest=(one1 two2 one1 three3)  

    #echo ${mytest[@]##o*e}   #删除元素开头位置符合o*e的元素内容(最长匹配)

    1 two2 1 three3

    关联数组

    capital["Illinois"]="Springfield"

    capital["Indiana"]="Indianapolis"

    退出状态码

    $? 上一命令执行的退出状态码,上一命令执行成功,返回0,不成功返回1-255,可使用echo $?取到

            状态码    描述

             0        命令成功结束

             1         通用未知错误

             2         误用shell命令

             126       命令不可执行

             127       没找到命令

             128       无效退出参数

             128+x     linux信号x的严重错误

             130       命令通过ctrl+C终止

             255       退出状态码越界

    111
  • 相关阅读:
    KD Tree
    Kmeans聚类算法
    考托业啊考托业,英语是硬伤啊!!!
    c++中xx.h和xx.cpp之间的联系
    vs2010常用快捷键
    径向基函数(RBF)
    Obj文件分析与读取
    Delaunay三角剖分中的LOP(Local Optimization Procedure)算法
    c++中冒号(:)的用法
    SVN在update时报com' is missing or not locked 的解决办法汇总
  • 原文地址:https://www.cnblogs.com/zmdsg/p/7086978.html
Copyright © 2011-2022 走看看