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
  • 相关阅读:
    Hard Rock
    Codeforces Round #416 (Div. 2) B. Vladik and Complicated Book
    codeforces 793B. Igor and his way to work
    codeforces 1B Spreadsheets
    HDU 1069 Monkey and Banana
    codeforces 2B The least round way
    【机器学习】 通俗说拟合
    python-八皇后问题
    python-核心知识思维导图
    python-@property 属性
  • 原文地址:https://www.cnblogs.com/zmdsg/p/7086978.html
Copyright © 2011-2022 走看看