一、shell概述

  1. shell是一个命令行解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序。还是一个功能强大的编程语言,是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
  2. shell的分类
    Shell两种主要语法类型(彼此不兼容)
    Bourne Shell(sh ksh Bash psh zsh)
    C Shell(csh tcsh)
    echo $SHELL可查看当前计算机运行的shell
  3. Linux支持的shell
    打开/etc/shells可查看

二、脚本执行方式

  1. echo输出命令
    echo 【选项】 【输出内容】
    选项:
    -e 支持反斜线控制的字符转换
    (\a 输出警告音
    \b 退格键,向左删除键
    \n 换行符
    \r 回车键
    \t 制表符,也就是Tab键
    \v 垂直制表符
    \0nnn 按照八进制ASCII码表输出字符,nnn是三位八进制数
    \xhh 十六进制,hh是两位十六进制数)
    eg: echo -e “hell\bo”
    echo -e “h\te\tl\nl\to\t”
    echo -e “\x68\t\x65\t\x6c\n\x6c\t\x6f\t”
  2. 写第一个脚本
    vim hello.sh
    注意写上注释
    #!/bin/bash
    #第一个shell脚本
    echo -e “\e[1;34m 天上掉下个猪八戒 \e[0m”
    #"\e[1;34m xxxxxx \e[0m" 给文字加上颜色
  3. 脚本执行
    赋予执行权限,直接运行
    chmod 755 hello.sh
    ./hello.sh 或者 /root/hello.sh
    通过Bash调用执行脚本
    bash hello.sh

三、Bash的基本功能

  1. 命令别名与快捷键
    查看与设定别名
    alias
    #查看系统中所有de命令别名
    alias 别名=‘原命令’
    #设定命令别名,只在本次登录有效
    别名永久生效与删除
    vi ~/.bashrc
    #写入环境变量配置文件,重启或source .bashrc后,可永久生效
    unalias 别名
    #删除别名
    命令生效顺序
    1.执行用绝对路径或相对路径执行的命令
    2.执行别名
    3.执行bash的内部命令
    4.执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令
    常用快捷键
    ctrl+c 强制终止当前命令
    ctrl+l 清屏
    ctrl+a 光标移动到命令行首
    ctrl+e 光标移动到命令行尾
    ctrl+u 从光标所在位置删除到行尾
    ctrl+z 帮命令放入后台
    ctrl+r 在历史命令中搜索
  2. 历史命令
    history 【选项】
    选项:
    -c 清空历史命令
    -w 把缓存中的历史命令写入历史命令保存文件~/.bash_history
    历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改
    历史命令的调用
    使用上下箭头调用以前的历史命令
    使用"!n"重复执行第n条历史命令
    使用“!!”重复执行上一条命令
    使用“!字串”重复执行最后一条以该字串开头的命令
  3. 输出重定向
    标准输出重定向
    命令 > 文件
    #以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中
    命令 >> 文件
    #以追加的方式,把命令的正确输出输出到指定
    的文件或设备当中
    eg:
    ls > test.log
    ls >> test.log
    标准错误输出重定向
    错误命令 2> 文件
    #以覆盖的方式,把命令的错误输出输出到指定
    的文件或设备当中
    错误命令 2>> 文件
    #以追究的方式,把命令的错误输出输出到指定
    的文件或设备当中
    eg:
    lsss > error.log
    lsss >> error.log
    正确输出和错误输出同时保存
    命令 > 文件 2>&1
    命令 &> 文件
    #以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中
    命令 >> 文件 2>&1
    命令 &>> 文件
    #以追加的方式,把正确输出和错误输出都保存到同一个文件当中
    命令 >>文件1 2>>文件2
    #把正确的输出追加到文件1中,把错误的输出追加到文件2中
    eg:
    ifconfig >> test.log 2>&1
    ifconfig >> test.log 2>>error.log
    输入重定向
    wc < test.log
    即wc test.log
    wc 【选项】【文件名】
    选项:
    -c 统计字节数
    -w 统计单词数
    -l 统计行数
  4. 多命令顺序执行与管道符
    多命令顺序执行
    命令1;命令2
    #多个命令顺序执行,命令之间没有任何逻辑联系
    命令1&&命令2
    #逻辑与
    命令1正确执行,命令2才会执行
    命令1执行不正确,命令2不会执行
    命令1||命令2
    #逻辑或
    命令1执行不正确,命令2才会执行
    命令1正确执行,命令2不会执行
    管道符
    命令1 | 命令2
    #命令1的正确输出作为命令2的操作对象
    eg:
    ls -l /etc | more(more分屏显示)
  5. 通配符与特殊符号
    通配符
    ? 匹配任意一个字符 * 匹配任意多个任意字符
    [ ] 匹配中括号中任意一个字符
    [-] 匹配中括号中任意一个字符,-代表一个范围。
    eg:[a-z]代表匹配一个小写字母
    [^] 逻辑非,表示匹配不是中括号内的一个字符。
    eg:[^0-9]代表匹配一个不是数字的字符
    Bash中其他特殊符号
    ’ ’ 单引号。在单引号中所有的特殊符号
    " " 双引号。在双引号中特殊符号都没有特殊含义
    `` 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。
    $() 和反引号作用一样,用来引用系统命令。
    #在Shell脚本中,#开头的行代表注释。
    $ 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值。
    \ 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如$将输出“$”符号,而不当做是变量引用。