zoukankan      html  css  js  c++  java
  • shell變量和數組

    我們要知道shell是一個很重要的腳本能幫助我們完成很多事情

    shell語言其實和很多的語言的語法是差不多的

    變量:

    變量的定義很簡單的,但是等號兩邊是不可以有空格的(不能有空格)

    • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
    • 中间不能有空格,可以使用下划线(_)。
    • 不能使用标点符号。
    • 不能使用bash里的关键字(可用help命令查看保留关键字)。

    定義變量:

      

    name="laowang"

    調用變量的時候需要在前面加上美元符號$

    #!/bin/bash
    
    you_name='laowang'
    echo $you_name
    echo ${you_name}
    
    輸出:laowang
       laowang

    {}加不加都可以,加上{}爲了着重表記這個變量  防止混淆

    变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

    for skill in Ada Coffe Action Java; do
        echo "I am good at ${skill}Script"
    done

    如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

    推荐给所有变量加上花括号,这是个好的编程习惯。

    已定义的变量,可以被重新定义,如:

    age=20
    echo ${age}
    age=30
    echo ${age}

    只读变量

    使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变

    #!/bin/bash
    myUrl="http://www.google.com"
    readonly myUrl
    myUrl="http://www.runoob.com"

    运行脚本,结果如下:

    /bin/sh: NAME: This variable is read only.


    刪除變量
    變量還可以設置爲一次性的,使用一次就刪除
    使用 unset 命令可以删除变量

    实例

    #!/bin/sh
    myUrl="http://www.runoob.com"
    unset myUrl
    echo $myUrl

    以上实例执行将没有任何输出。

    一般變量都是有三種:

    变量类型

    运行shell时,会同时存在三种变量:

    • 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
    • 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
    • 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

    Shell 字符串

    字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号

    单引号

    str='this is a string'
     

    单引号字符串的限制:

    • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
    • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

    雙引號:

    双引号的优点:

    • 双引号里可以有变量
    • 双引号里可以出现转义字符
    you_name='runoob'
    str="Hello,I know you are "$you_name"! 
    "
    echo -e ${str}
    因爲用了轉譯 所以輸出的時候要用  -e
    Hello,I know you are "runoob"! 

    不用-e

    you_name='runoob'
    str="Hello,I know you are "$you_name"! 
    "
    echo ${str}

    輸出的結果:是帶着你的轉譯符的

    Hello,I know you are "runoob"! 
    

    拼接字符串

    your_name="runoob"
    # 使用双引号拼接
    greeting="hello, "$your_name" !"
    greeting_1="hello, ${your_name} !"
    echo $greeting  $greeting_1
    # 使用单引号拼接
    greeting_2='hello, '$your_name' !'
    greeting_3='hello, ${your_name} !'
    echo $greeting_2  $greeting_3

    記住因爲是單引號內的符號都會原樣輸出所以結果是

    hello, runoob ! hello, runoob !
    hello, runoob ! hello, ${your_name} !

    获取字符串长度

    字符串的長度要配合#來獲取的 ,長度不是下標

    you="nishiyigedashabi"
    
    echo ${#you}
    
    
    輸出結果是16

    提取子字符串 也就是索引取值

    you="nishiyigedashabi"
    
    echo ${you:0:4}    取出下標0-3的值 就是長度1-4  下標和長度的破案判斷不同
      

    查找子字符串

    找出所在的位置

    you="nishiyigedashabi"
    
    echo `expr index "$you" ig` 查找的是i和g在字符串中的位置之查找一次 並且那個顯出先輸出那個
    輸出2

    Shell 数组

    bash支持一维数组(不支持多维数组),并且没有限定数组的大小。

    定义数组

    在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:

    数组名=(值1 值2 ... 值n)

    eg:
    arry=(valu1 valu2 valu3)

    读取数组

    读取数组元素值的一般格式是:

    ${数组名[下标]}

    如果你是直接讀取數組的話只會顯示遮蓋數組的第一個值

    eg:

      

    #!/bin/bash
    
    
    arry=(valu1 valu2 valu3)
    
    echo $arry
    
    
    直接輸出就是:
    輸出:valu1

    獲取全部元素就要加上@

    使用 @ 符号可以获取数组中的所有元素

    echo ${array_name[@]}

    按照下標取值:

      

    ${数组名[下标]}

    例如:

    valuen=${array_name[n]}

    获取数组的长度

    获取数组长度的方法与获取字符串长度的方法相同,例如:

    # 取得数组元素的个数
    length=${#array_name[@]}
    # 或者
    length=${#array_name[*]}
    # 取得数组单个元素的长度
    lengthn=${#array_name[n]}

    Shell 注释

    # 开头的行就是注释,会被解释器忽略。

    單行注釋就是 #

    多行注釋:


    方法一:
    :<<EOF 注释内容... 注释内容... 注释内容... EOF

    方法其他:
    :<<'
    注释内容...
    注释内容...
    注释内容...
    '
    
    :<<!
    注释内容...
    注释内容...
    注释内容...
    !





     
    #!/bin/bash
    
    
    arry=(valu1 valu2 valu3)
    
    echo ${arry[@]}
    
    
    輸出就是:valu1 valu2 valu3)
  • 相关阅读:
    多表联合查询,利用 concat 模糊搜索
    order by 中利用 case when 排序
    Quartz.NET 3.0.7 + MySql 动态调度作业+动态切换版本+多作业引用同一程序集不同版本+持久化+集群(一)
    ASP.NET Core 2.2 基础知识(十八) 托管和部署 概述
    ASP.NET Core 2.2 基础知识(十七) SignalR 一个极其简陋的聊天室
    ASP.NET Core 2.2 基础知识(十六) SignalR 概述
    ASP.NET Core 2.2 基础知识(十五) Swagger
    ASP.NET Core 2.2 基础知识(十四) WebAPI Action返回类型(未完待续)
    linux磁盘管理 磁盘查看操作
    linux磁盘管理 文件挂载
  • 原文地址:https://www.cnblogs.com/zhaoyunlong/p/10476477.html
Copyright © 2011-2022 走看看