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
posted @ 2022-03-10 00:50  躲在墙角的  阅读(19)  评论(0编辑  收藏  举报