Shell基础

来源:互联网 发布:算法的书籍推荐 编辑:程序博客网 时间:2024/05/16 18:11

一、Shell概述

    Shell是一个命令行解释器,为用户提供向Linux内核发送请求以便运行程序的界面系统级程序,用户可以通过Shell来启动、挂起、停止或者编写程序。简单来说就是把用户敲入的ABCD命令翻译成为内核可识别的0101机器语言,然后内核再调用硬件完成操作

这里写图片描述

    Shell还是一个功能强大的编程语言,是解释执行的脚本语言(不需要预先编译),在Shell中可以直接调用Linux系统命令

    Shell的主要语法类型有Bourne(sh、ksh、Bash等)和C(csh,tcsh等),彼此不兼容。通过/etc/shells可以Linux支持的Shell,其中/sbin/nologin代表用户不允许登录

这里写图片描述

二、Shell脚本执行方式

1.编写shell脚本

    编写hello.sh,其中#!/bin/bash,用于表示以下程序是shell脚本,在简单程序中不写其实程序执行不会影响,但是出现更加复杂的情况时,比如说在Shell脚本中嵌套其他语句就会报错,所以一般来说习惯性添加为好

这里写图片描述

2.脚本执行

  • 赋予执行权限直接运行(绝对路径或相对路径)

    这里写图片描述

  • 通过Bash调用执行脚本

    这里写图片描述

三、Bash的基本功能

1. 历史命令与命令补全

功能描述:查看历史命令
语法:history [选项] [历史命令保存文件]
          -c 清空历史命令
          -w 把缓存中的历史命令写入历史命令保存文件,默认保存在用户家目录中~/.bash_history
提示:Linux会把所输入的命令都保存到计算机,默认保存1000条,可以在环境变量配置文件/etc/profile中修改
          历史命令的调用:上下箭头,’!n’重复执行第n条命令,’!!’重复执行上一条命令,’!字符串’重复执行最后一条以字符串开头的命令


功能描述:命令或文件补全
语法:Tab键

2. 命令别名与常用快捷键

功能描述:命令别名
语法:alias [别名=’原命令’]
          不加选项为查询命令别名,添加选项为设定命令别名
注意:
          命令执行顺序:执行用绝对路径或相对路径的命令->执行别名->执行Bash内部命令->执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令
          使用命令行定义的别名只会临时生效,让别名永久生效则需写入用户家目录~/.bashrc文件
提示:取消别名可以使用命令unalias 别名


这里写图片描述

3. 输入输出重定向

  • 标准输入输出

    这里写图片描述

  • 输出重定向

    这里写图片描述

  • 输入重定向

        输入重定向在实际中远没有输出重定向使用得多,练习的时候可以使用wc命令

    功能描述:统计键盘输入
    语法:wc [-cwl] [文件名]
              -c 统计字节数
              -w 统计单词数
              -l 统计行数
    提示:结束输入加ctrl+d
    例子:wc < 文件名        统计文件的行数、单词及字节数

4. 多命令顺序执行与管道符

这里写图片描述

命令描述:搜索符合条件的字符串所在行
语法:grep [选项] “搜索内容” 文件名
          -i 忽略大小写
          -n 输出行号
          -v 反向查找
          –color=auto 颜色显示搜索出的关键字
例子:netstat -an | grep “ESTABLISHED”

5. 通配符与其他特殊符号

  • 通配符

    这里写图片描述

  • 特殊符号

    这里写图片描述

举个栗子:
          time=date,echo $time,实际结果为当前时间而不是date字符串,也就是说反引号和$()会把命令先执行,再把结果赋值给变量

四、Bash的变量

1. 用户自定义变量

变量的默认类型都是字符串类型,进行数值运算时必须指定变量类型为数值型
变量用等号连接值,左右两侧不能有空格
变量的值存在空格时需要使用引号
变量的值中可以使用转义符

通过$变量名,调用变量
通过set查看变量,包括环境变量,系统变量以及自定义变量
通过unset加变量名,进行变量的删除

2. 环境变量

    保存和操作系统环境相关的数据,用户自定义变量只在当前Shell中生效,而环境变量则会在当前Shell和该Shell的所有子Shell中生效,如果把环境变量写入相应的配置文件则会在所有Shell中生效

申明变量:export 变量名[=变量值]
查询变量:env
删除变量:unset 变量名

  • PATH

        用冒号分隔的路径,用于系统查找命令

  • PS1

        系统提示符的变量

    \d 显示日期,\h 显示主机名,\u 显示当前用户名,\w 显示当前所在目录完整名称,\W显示当前所在目录最后一个目录,\$ 提示符(root为#,普通用户为$)

3. 位置参数变量

    向脚本传递参数或数据,变量名不能自定义,变量作用固定,但通常很少使用

这里写图片描述


功能描述:接收键盘输入
语法:read [-ptns] [变量名]
          -p “提示信息”,等待read输入时,输出提示信息
          -t 指定等待输入时间
          -n 字符数,只接受指定的字符数就会执行
          -s 隐藏输入的数据(密信息输入)

4. 预定义变量

    Bash中已经定义好的变量,变量名不能自定义,变量作用固定

这里写图片描述

五、Bash的运算符

功能描述:声明变量类型
语法:declare [+/-] [-ixp] 变量名
          - 为变量设定类型属性
          + 取消变量的类型属性
          -i 变量声明为整型
          -x 变量声明为环境变量
          -p 显示指定变量的被声明类型
例子:aa=11,bb=22,declare -i cc=$aa+$bb
提示:除了使用declare声明类型外,还可以通过$((运算式))或者$[运算式]计算

六、环境变量配置文件

1. 简介

    环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,如PATH,HISTSIZE,PS1,HOSTNAME等

    系统中的环境变量配置文件:/etc/profile , /etc/profile.d/*.sh , ~/.bash_profile , ~/.bashrc , /etc/bashrc ,保存在etc目录下的是对所有用户都生效,在用户家目录下的配置文件则对当前用户生效

功能描述:修改配置文件后使其立即生效
语法:source 配置文件 或 . 配置文件

2. 作用

这里写图片描述

  • /etc/profile

        定义USER,LOGNAME,MAIL,PATH,HOSTNAME,HISTSIZE变量,umask ,调用/etc/profile.d/*sh

  • ~/.bash_profile

    调用~/.bashrc文件,在PATH变量后加入/bin目录

  • ~/.bashrc

    调用/etc/bashrc

  • /etc/bashrc

    定义默认提示符,也会定义umask之类的,但是是针对不用密码登录而直接切换的情况生效

3. 其他配置文件和登录信息

注销时生效的环境变量配置文件:~/.bash_logout
历史命令保存文件:~/.bash_history
本地终端欢迎信息:/etc/issue
远程终端欢迎信息:/etc/issue.net
登录后欢迎信息:/etc/motd