zoukankan      html  css  js  c++  java
  • shell 学习笔记--未完待续

    Shell 是什么
     
    Shell 是指一种命令行解释器,是为用户和操作系统之间通信提供的一种接口
     
    分类
    1. 图形界面shell(graphical user interface)
    2. 命令行shell (Command Line Interface ) 即CLI
     
    Shell不只是解释器,还是一种脚本语言(解释型语言)
     
    工作模式:
    1. 互动模式
    2. 脚步模式
    互动模式:由系统管理人员直接通过键盘输入命令,并等待其执行在一个命令
    脚步模式:设计出一个脚步文件,将所有需要执行命令写在该文件中,由bash shell读取并执行
     
    Shell 内建命令
     
    bash, :, ., [, alias, bg, bind, break, builtin, cd, command, compgen, complete, continue, declare, dirs, disown, echo, enable, eval, exec, exit,export, fc, fg,
    getopts , hash, help, history, jobs, kill, let, local, logout, pops, printf, pushed, pwd, read,redonly, return, set, shift,shopt, source, suspend, test, times,
    trap, rype, typeset, ulimit, smash,unalias,unset,wait
     
     
    export 使变量能被子shell识别
    //编写脚本export.sh内容
    #!/bin/bash
    echo $var
     
    //执行脚本,结果变量为空
    $ ./export.sh
     
    // 赋值变量
    $ var=100
    $ echo $var
    100
     
    //查看变量是否变化
    $ bash export.sh
     
    //export 导出变量
    $ export var=100
    $ bash export.sh
    100
     
    echo $? 查看上次返回值
    #!/bin/bash
    function func_01 {
        return 01
    }    
    # 调用函数
    func_01
    # 查看之前函数的返回值
    echo $?
     
     
    查看bash版本信息
    #系统中使用的shell
    $ bash
    bash-3.2
     
    $ echo $SHELL
    /bin/bash
    bash-3.2
     
    # 查看bash shell版本信息(1)
    $ bash --version
    GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
    Copyright (C) 2007 Free Software Foundation, Inc.
    bash-3.2
    # 查看bash shell版本信息(2)
    $ echo $BASH_VERSION
    3.2.57(1)-release
     
     
    shell编程基础
     
    • shell 变量
    • shell 传递参数
    • Shell 数组
    • Shell 运算符
    • shell echo 命令
    • Shell printf命令
    • shell test命令
    • shell 流程控制
     
    变量
    1. shell变量:弱类型(声明变量时不需要指定变量的类型)
    1. 类型
      1. 局部变量
      2. 环境变量(全局变量)(默认)
            局部变量:指在某个shell中有效的变量,在其他shell中来说没有关系与作用,随着shell消息也跟着消失,作用范围限定在声明的某个shell中
            环境变量:也称全局变量,shell脚本中默认是环境变量
            若需子shell集成当前shell变量,可用export命令到导出为环境变量
            注意:环境变量只能向下传递,不能向上传递(传子不传父)
     
    $BASH — bash shell 全路径
    $ echo $BASH
    /bin/bash
    $BASH_VERSION — bash shell 版本
    $BASH_VERSION
    3.2.57(1)-release
     
    $CDPATH — 快速进入某个目录
     
     
    $EUID — 记录当前用户UID;root 值为0
    $ echo $EUID
    501
    $FUNCNAME — 在用户函数体内部,记录当前函数体的函数名
    #!/bin/bash
    function func_01 {
        echo $FUNCNAME
    }    
    # 调用函数
    func_01
     
    ./export.sh
    func_01
     
    $HISTCMD  — 记录下一条history命令中的编号
      512  history
     
    $ echo $HISTCMD
    515
     
    $HISTFILE — 记录history命令记录文件的位置
    $HISTFILESIZE — 设HISTFILE文件记录命令的行数
    $HISTSIZE — 缓冲区大小
    $HOSTNSME — 展示主机名
    $HOSTTYPE — 展示主机架构
    $MACHTYPE — 主机类型GPU标示
    $LANG — 设置当前系统语言环境
    $PWD — 当前目录
    $OLDPWD — 记录之前目录
    $PATH — 代表命搜索的路径
    $PS1 — 命令提示符
     
    标识符代码 含义
    W 当前工作目录的basename
    w 当前工作目录的全路径
    d 日期,格式:“周 月 日”
    H 完整的主机名
    h 主机名
    24小时制的时间,格式:HH:MM:SS
    T 12小时制的时间
    u 当前用户的用户名
    $ UID为0 显示“#”,否则显示“$”
    变量命名
    规则:
      1. 必须以字母或下划线开头
      2. 长度没限制
      3. 不能喝shell的预设变量重名
      4. 不能使用shell的关键字
      5. 不能特殊字符开头
      6. 不能以数字开头
     
    变量赋值与取值
     
    # 定义:变量名=变量值
    $name=john
    # 注意:变量名与变量值之间用=等号相连不能有空格
    $ name = john
    -bash: name: command not found
     
    #变量值包含空格的,可以用双引号 或单引号包含 ,否则报错
    $ name=“jihan”
    $ name='hi jihan'
    $ name="hi jihan”
     
    $ name=hi jihan
    -bash: jihan: command not found
     
     
    使用 ${ } 获取变量值 是一种保险的方式
    bash-3.2$ name="hi jihan"
    bash-3.2$ echo ${name}
    hi jihan
    bash-3.2$ echo name
    name
    shell具有弱变量特性,没有预先声明变量也可以引用
     
    取消变量 — unset
     
    bash-3.2$ name="hi jihan"
    bash-3.2$ echo ${name}
    hi jihan
     
    # 取消变量/函数
    bash-3.2$ unset name
    bash-3.2$ echo ${name}
     
    特殊变量
      1. 位置参数
      2. 脚本或命令返回值 ¥?— 上一个命令的返回值
     
    数组
    shell中的数组对元素个数没有限制,担支持一维数组
    定义: declare 定义数组array,下标从0开始
     
    bash-3.2$ declare -a Array
    bash-3.2$ Array[0]=0
    bash-3.2$ Array[1]=1
    bash-3.2$ Array[2]="hi jihan"
    bash-3.2$ echo $Array
    0
    bash-3.2$ echo $Array[0]
    0[0]
     
    # 获取数组元素必须使用 ${ } 方式
    bash-3.2$ echo ${Array[0]}
    0
      1. 一次性获取所有元素的值
      • echo ${Array[@]}
    bash-3.2$ echo ${Array[@]}
    0 1 hi jihan
      • echo ${Array[*]}
    bash-3.2$ echo ${Array[*]}
    0 1 hi jihan
     
      1. 获取数组长度 — 使用”#“
    bash-3.2$ echo ${#Array[*]}
    3
     
      1. 数组截取
    bash-3.2$ echo ${Array[*]:1:2}
    1 hi jihan
      1. 连接数组
    bash-3.2$ Name[0]='hi name’
     
    #使用()括号括起来,赋值给一个新变量,实现连接数组合并
    bash-3.2$ Con=(${Array[*]}  ${Name[*]})
     
    # 默认取出第一个
    bash-3.2$ echo ${Con}
    0
     
    #取出全部
    bash-3.2$ echo ${Con[*]}
    0 1 hi jihan hi name
     
    #注意: 两个数组存在元素值相同时,并没有去重处理
    bash-3.2$ Name[1]=1
    bash-3.2$ Con=(${Array[*]}  ${Name[*]})
    bash-3.2$ echo ${Con[*]}
    0 1 hi jihan hi name 1
      1. 替换元素
     
    #只需要将需求修改元素值,以 “取出全部数组” + “/” + 旧元素值 + “/” + 新元素值 ,然后用()括起来赋值回当前数组变量就可以
    bash-3.2$ Array=(${Array[*]/hi jihan/hijian})
     
    bash-3.2$ echo  ${Array[*]}
    0 1 hijian
      1. 取消数组或元素
    bash-3.2$ echo ${Name[*]}
    hi name 1
    bash-3.2$ unset Name[1]
    bash-3.2$ echo ${Name[*]}
    hi name
     
  • 相关阅读:
    浅析@Deprecated
    微信小程序开发系列一:微信小程序的申请和开发环境的搭建
    HTTP 200 OK和HTTP 304 Not modified的由来
    深入理解Java的整型类型:如何实现2+2=5?
    聊聊JavaScript和Scala的表达式 Expression
    Java异常处理:如何写出“正确”但被编译器认为有语法错误的程序
    如何在ABAP里用函数式编程思想打印出非波拉契Fibonacci(数列)
    使用JavaScript ES6的新特性计算Fibonacci(非波拉契数列)
    JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载
    Cordova应用的JavaScript代码和自定义插件代码的调试
  • 原文地址:https://www.cnblogs.com/smallyi/p/11959480.html
Copyright © 2011-2022 走看看