Shell基础

204 阅读2分钟

Shell概述

Shell 是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动,挂起,停止甚至是编写一些程序.

Shell脚本的执行方式

  • echo输出命令

    • -e 支持转义符 image-20210210163327177
  • echo -e "\e[1;31m abcd \e[0m"

    • \e[1开启颜色输出
    • \e[0m结束颜色输出
    • 31m代表红色

image-20210210163937570

  • window的回车符转unix
    • dos2unix 文件名
    • Tetris.sh

Bash的基本功能

历史命令与命令补全

  • history [选项] [历史命令保存文件]
    • -c 清空历史命令
    • -w 把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
    • 历史命令默认保存1000条,可以在环境变量配置文件/etc/profile中进行修改

命令别名与常用快捷键

  • alias 别名='原命令' 设定命令别名
  • alias 查询命令别名

命令执行时顺序

  1. 执行用绝对路径或相对路径执行的命令
  2. 执行别名
  3. 执行bash的内部命令(比如cd)
  4. 执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令

让别名永久生效:

  • vi /root/.bashrc(修改用户家目录下的.bashrc文件)

删除别名

  • unalias 别名

bash常用快捷键

image-20210210172444380

输入输出重定向(将显示到屏幕的输出重定向到文件)

image-20210210172740617

image-20210210172920431

image-20210212095532352

  • 标准输出和错误输出都丢弃到黑洞
    • ls &>/dev/null

输入重定向(用文件代替键盘输入)

  • wc [选项][文件名]
    • -c 统计字节数
    • -w 统计单词数
    • -l 统计行数
    • wc < anaconda-ks.cfg

多命令顺序执行与管道符

image-20210212100923287

  • dd if=输入文件 of=输入文件 bs=字节数 count="个数" 磁盘复制或数据复制(可以复制分区,包括文件系统)
    • if=输入文件 指定源文件或源设备
    • of=输出文件 指定目标文件或目标设备
    • bs=字节数 指定一次输入/输出多少字节,即把在黑鞋字节看做一个数据块
    • count=个数 指定输入/输出多少个数据块
    • date ; dd if=/dev/zero of=/root/testfile bs=1K count=100000 ; date
  • 判断命令是否正确执行
    • ls && echo yes || echo no

管道符

  • 命令1 | 命令2
    • 命令1的正确输出作为命令2的操作对象
    • 颜色显示
  • grep [选项] "搜索内容" 文件名
    • -i: 忽略大小写
    • -n: 输出行号
    • -v: 反向查找
    • color=auto 搜索出的关键字用颜色显示

通配符与其他特殊符号

image-20210212104024054

image-20210212104619184

Bash的变量

用户自定义变量

变量:

变量时计算机内存的单元,其中存放的值可以改变.当Shell脚本需要保存一些信息时,如一个文件名或时一个数字,就把它存放在一个变量中.每个变量有一个名字,所以很容易引用它.使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息.

变量规则:

  1. Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型.
  2. 变量用等号连接值,等号左右两侧不能有空格.
  3. 变量的值如果有空格,需要使用单引号或双引号包括.
  4. 在变量的值中,可以使用""转义符
  5. 如果需要增加变量的值,那么可以进行变量值的叠加.不过变量需要用双引号包含"变量名"或用变量名"或用{变量名}包含
  6. 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令
  7. 环境变量名建议大写,便于区分

变量分类:

  • 用户自定义变量

  • 环境变量:

    • 这种变量中主要保存的是和系统操作环境相关的数据
  • 位置参数变量:

    • 这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的
  • 预定义变量:是Bash中已经定义好的变量

  • 变量调用

    • echo $name
  • 变量查看

    • set
  • 变量删除

    • unset name

环境变量

用户自定义变量只在当前的Shell中生效,而环境变量会在当前Shell和这个Shell的所有子Shell当中生效.如果

把环境变量写入相应的配置文件,那么这个环境变量就会在所有的Shell中生效.

设置环境变量

  • 声明变量

    • export 变量名=变量值 (全局变量)
    • name=xiaoming(局部变量)
    • export name(变为全局变量)
  • 查询变量

    • env
  • 删除变量

    • unset 变量名

父子Shell

  • 在Shell中开启子Shell
    • csh,bash
    • pstree

系统常见环境变量

  • PATH:
    • 系统查找命令的路径
  • echo $PATH
  • PATH变量叠加
    • PATH="$PATH":/root/sh

image-20210212142235639

位置参数变量

image-20210212142915931

预定义变量

image-20210212152359608

接收键盘输入:

read [选项] [变量名]

  • -p "提示信息" :在等待read输入时,输出提示信息
  • -t秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间
  • -n 字符数: read命令只接收指定的字符数,就会执行
  • -s:隐藏输入的数据,适用于机密信息的输入
#!/bin/bash

read -t 30 -p "Plead input your name:" name

echo "Your name is $name"

Bash的运算符

数值运算与运算符

  1. declare声明变量类型
    1. declare [+/-] [选项] 变量名
      1. -: 给变量设定嗯类型属性
      2. +:取消变量的类型属性
      3. -i:将变量声明为整数型(integer)
      4. -x:将变量声明为环境变量
      5. -p:显示指定变量的被声明的类型
  2. expr或let数值运算工具
    1. aa=11
    2. bb=22
    3. dd=(expr(expr aa + $bb)
      1. dd的值是aa和bb的和.注意+号左右两侧必须有空格
  3. "((运算式))""((运算式))"或"[运算式]"

image-20210212155302336

变量测试与内容替换

image-20210212155645708

环境变量配置文件

  • 环境变量配置文件简介
    • source命令
      • source 配置文件
      • . 配置文件
    • 简介:
      • 环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH,HISTSIZE,PSI,HOSTNAME等默认环境变量
      • /etc/profile
      • /etc/profile.d/*.sh
      • ~/.bash_profile
      • ~/.bashrc
      • /etc/bashrc
  • 环境变量配置文件作用

image-20210212162253416

  • /etc/profile的作用:
    • USER
    • LOGNAME
    • MAIL
    • PATH
    • HOSTNAME
    • HISTSIZE
    • umask
    • 调用/etc/profile.d/*.sh文件

其他配置文件和登录信息

  1. 注销时生效的环境变量配置文件
    • ~/.bash_logout
  2. 其他配置文件
    1. ~/bash_history
  3. Shell登录信息
    1. 本地终端欢迎信息:/etc/issue

image-20210212170020928

image-20210212170342870

image-20210212170545327