• shell 小入门


    shell

    • 实际上这是个编程语言、脚本语言

    shell命令解析器

    • shell是个脚本语言,脚本语言就需要 解释执行,那么就有了shell命令解释器
    • 查看linux上的命令解释器
      cat /etc/shells
      
    • Centos默认的解析器是bash

    shell脚本开头格式

    • 脚本以#!/bin/bash开头(用于指定解析器)
    • 当然也可以直接不指定解析器,也就是不写这种东西(就用默认的解析器)

    小demo

    • 需求:创建一个Shell脚本,输出helloworld
    • 案例实操:
      创建文件:
      touch helloworld.sh
      vim helloworld.sh  
      
      然后开始粘贴内容:
      #!/bin/bash
      echo "helloworld"
      
      执行脚本
      bash helloworld.sh
      

    shell脚本执行方式

    1. shell脚本可以直接在shell命令解释器直接执行,不需要编写成多命令文件
    2. 采用bash或sh+脚本的相对路径或绝对路径(不用赋予脚本+x权限)
      sh+脚本的相对路径
      sh helloworld.sh
      
    3. 采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
    • 首先要赋予helloworld.sh 脚本的+x权限
      chmod 777 helloworld.sh
      或者
      chmod +x helloworld.sh
      
    • 执行脚本
      ./helloworld.sh
      

    注意:第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。

    Shell中的变量

    1. 系统变量
      1. 常用系统变量
        $HOME、$PWD、$SHELL、$USER等
      2. 案例实操
        1. 查看系统变量的值
          echo $HOME
          
        2. 显示当前Shell中所有变量:set
          set
          
    2. 自定义变量
      1. 基本语法
        1. 定义变量:变量=值
          非常注意:等号两边不能有空格
        2. 撤销变量:unset 变量
        3. 声明静态变量:readonly变量,注意:不能unset
        4. export可把变量提升为全局环境变量,可供其他Shell程序使用,
      2. 变量定义规则
        1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
        2. 等号两侧不能有空格
        3. 在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
        4. 变量的值如果有空格,需要使用双引号或单引号括起来。
    3. 特殊变量
      1. $#
        功能描述:获取所有输入参数个数,常用于循环
      2. $*
        功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
      3. $@
        功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
      4. $?
        功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。
      5. $1,S2,S3
        功能描述:第一个参数,第二个参数,S0是脚本的名字

    运算符

    1. 基本语法
      1. “$((运算式))”或“$[运算式]”
      2. expr + , - , *, /, % 加,减,乘,除,取余
        注意:expr运算符间要有空格

    条件判断

    1. [ condition ]
    • 注意:condition前后要有空格
    • 条件非空即为true,[ atguigu ]返回true,[] 返回false。
    1. 常用判断条件
      1. 两个整数之间比较
        = 字符串比较
        -lt 小于(less than)			-le 小于等于(less equal)
        -eq 等于(equal)				-gt 大于(greater than)
        -ge 大于等于(greater equal)	-ne 不等于(Not equal)
        
      2. 按照文件权限进行判断
        -r 有读的权限(read)			-w 有写的权限(write)
        -x 有执行的权限(execute)
        
      3. 按照文件类型进行判断
        -f 文件存在并且是一个常规的文件(file)
        -e 文件存在(existence)		-d 文件存在并是一个目录(directory)
        

    流程控制-判断

    • if
      if [ 条件判断式 ];then 
      程序 
      fi
      或者
      if [ 条件判断式 ]
      then
      程序
      fi
      
      • 注意:[ 条件判断式 ],中括号和条件判断式之间必须有空格
      • 注意:if后要有空格
    • case
      case $变量名 in 
        "值1") 
          如果变量的值等于值1,则执行程序1 
          ;; 
        "值2") 
          如果变量的值等于值2,则执行程序2 
          ;; 
        …省略其他分支… 
        *) 
          如果变量的值都不是以上的值,则执行此程序 
          ;; 
      esac
      
      • case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
      • 双分号“;;”表示命令序列结束,相当于java中的break。
      • 最后的“*)”表示默认模式,相当于java中的default。

    流程控制-循环

    • for第一种用法
      for (( 初始值;循环控制条件;变量变化 )) 
      do 
        程序 
      done
      
    • for第二种用法
      for 变量 in 值1 值2 值3… 
      do 
        程序 
      done
      
    • while
      while [ 条件判断式 ] 
      do 
        程序
      done
      

    read读取控制台输入

    • 语法
      read(选项)(参数)
      
      选项:
      -p:指定读取值时的提示符;
      -t:指定读取值时等待的时间(秒)。
      参数
      变量:指定读取值的变量名
      

    函数

    • 系统函数
      • basename
      • dirname
    • 自定义函数
      [ function ] funname[()]
      {
      Action;
      [return int;]
      }
      
      • 必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。
      • 函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)

    shell工具

    • cut
      cut [选项参数]  filename
      
      说明:默认分隔符是制表符
      选项参数	功能
      -f	列号,提取第几列
      -d	分隔符,按照指定分隔符分割列
      
    • sed
      • sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
      • 用法
        sed [选项参数]  ‘command’  filename
        
        选项参数	功能
        -e	直接在指令列模式上进行sed的动作编辑。
        命令	功能描述
        a 	新增,a的后面可以接字串,在下一行出现
        d	删除
        s	查找并替换
        
    • awk
    • sort
  • 相关阅读:
    java.lang.IllegalAccessError: tried to access method org.apache.poi.util.POILogger.log from class org.apache.poi.openxml4j.opc.ZipPackage
    相同域名不同端口的两个应用,cookie名字、路径都相同的情况下,后面cookie会覆盖前面cookie吗
    power designer 连接mysql提示“connection test failed”
    疑问:Spring 中构造器、init-method、@PostConstruct、afterPropertiesSet 孰先孰后,自动注入发生时间
    intelj idea 创建聚合项目(典型web项目,包括子项目util、dao、service)
    Mysql启动时提示:Another MySQL daemon already running with the same unix socket.
    MySql中的varchar长度究竟是字节还是字符
    百度echarts使用--y轴label数字太长难以全部显示
    记录项目中用的laypage分页代码
    Ubuntu16.04下安装Cmake-3.8.2并为其配置环境变量
  • 原文地址:https://www.cnblogs.com/cgengwei/p/15987818.html
Copyright © 2020-2023  润新知