zoukankan      html  css  js  c++  java
  • Shell 基础语法

    Shell 变量


    一、定义变量
    定义变量时,变量名不需要加美元符号($)。
    注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。
    同时,变量名的命名须遵循如下规则:
        命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
        中间不能有空格,可以使用下划线(_)。
        不能使用标点符号。
        不能使用bash里的关键字(可用help命令查看保留关键字)。


    二、使用变量
    使用一个定义过的变量,只要在变量名前面加美元符号即可。


    三、只读变量
    使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
    myUrl="http://www.baidu.com";
    readonly myUrl;


    四、删除变量
    使用 unset 命令可以删除变量。
    语法:
        unset variable_name;



    五、Shell 字符串
    1.字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。
    注意:
      单引号里的任何字符都会原样输出。
      双引号里可以有变量、转义字符。

    2. 获取字符串长度
      string="abcd";
      echo ${#string};    #输出 4

    3. 提取子字符串
    以下实例从字符串第 2 个字符开始截取 4 个字符:
      string="aa bb cc dd ee";
      echo ${string:1:4};     # 输出 a bb

    4. 查找子字符串
    查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):
      string="aa bb cc dd ee";
      echo `expr index "$string" b`  # 输出 4



    六、Shell 数组
    bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
    类似与 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。

    1. 定义数组
    在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。
    定义数组的一般形式为:
        数组名=(值1 值2 ... 值n);
       
    2. 读取数组
    读取数组元素值的一般格式是:${数组名[下标]}。
    例如:valuen=${array_name[n]};

    使用@ 或 * 可以获取数组中的所有元素。
    例如:echo ${array_name[*]};
             echo ${array_name[@]};

    3. 获取数组的长度
    获取数组长度的方法与获取字符串长度的方法相同。
    例如:
    #取得数组元素的个数
    length=${#array_name[@]}  
    length=${#array_name[*]}

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


    七、Shell 传递参数
    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,$0 为执行的文件名,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
    另外,还有几个特殊字符用来处理参数:
    参数处理     说明
    $#           传递到脚本的参数个数。
    $*           以一个单字符串显示所有向脚本传递的参数。不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,"*" 等价于 "1 2 3"(传递了一个参数)。  
    $@         以一个单字符串显示所有向脚本传递的参数。不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,"@" 等价于 "1" "2" "3"(传递了三个参数)。
    $$           脚本运行的当前进程ID号。
    $!            后台运行的最后一个进程的ID号。
    $-           显示Shell使用的当前选项,与set命令功能相同。
    $?          显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
     
     

    八、Shell test 命令
    Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
    1.数值测试
    参数     说明
    -eq     等于则为真
    -ne     不等于则为真
    -gt      大于则为真
    -ge     大于等于则为真
    -lt       小于则为真
    -le      小于等于则为真

    2.字符串测试
    参数          说明
    =          等于则为真
    !=         不相等则为真
    -z 字符串       字符串的长度为零则为真
    -n 字符串       字符串的长度不为零则为真

    3.文件测试
     参数       说明
    -e 文件名     如果文件存在则为真
    -r 文件名     如果文件存在且可读则为真
    -w 文件名     如果文件存在且可写则为真
    -x 文件名     如果文件存在且可执行则为真
    -s 文件名     如果文件存在且至少有一个字符则为真
    -d 文件名     如果文件存在且为目录则为真
    -f 文件名     如果文件存在且为普通文件则为真
    -c 文件名     如果文件存在且为字符型特殊文件则为真
    -b 文件名     如果文件存在且为块特殊文件则为真



    九、Shell 函数
    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。
    shell中函数的定义格式如下:
    [ function ] funname [()]
    {
        action;
        [return int;]
    }



    十、Shell 输入/输出重定向
    大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。
    重定向命令列表如下:
    命令              说明
    command > file       将输出重定向到 file。
    command < file       将输入重定向到 file。
    command >> file     将输出以追加的方式重定向到 file。
    n > file           将文件描述符为 n 的文件重定向到 file。
    n >> file         将文件描述符为 n 的文件以追加的方式重定向到 file。
    n >& m          将输出文件 m 和 n 合并。
    n <& m          将输入文件 m 和 n 合并。
    << tag           将开始标记 tag 和结束标记 tag 之间的内容作为输入。




    十一、/dev/null 文件
    如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:
    $ command > /dev/null
    /dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。

    如果希望屏蔽 stdout 和 stderr,可以这样写:
    $ command > /dev/null 2>&1
     注意:0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。



    十二、Shell 文件包含
    和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。
    Shell 文件包含的语法格式如下:
    . filename   # 注意点号(.)和文件名中间有一空格

    source filename



       

  • 相关阅读:
    《礼物》
    第三讲.线性表(读书笔记)
    UI第十四讲(上) UI高级可视化设计 (XIB, Storyboard, AutoLayout, SIzeClass )
    UI第十三讲 UITabBarController(标签视图控制器) Block块传值
    UI第十二讲 通讯录实战
    deepin中Tomcat添加执行权限
    deepin修改javahome不生效,一直显示openjdk解决
    deepin中idea中文乱码解决
    maven添加settings.xml使用阿里云仓库
    debian配置java环境变量
  • 原文地址:https://www.cnblogs.com/sunziying/p/9601337.html
Copyright © 2011-2022 走看看