zoukankan      html  css  js  c++  java
  • shell内置命令

    知识点1:什么是shell内建命令?

    Shell 内建命令,就是由 Bash 自身提供的命令,而不是文件系统中的某个可执行文件。

    内建命令与普通命令的性质是不一样的,内建命令并不是某个外部文件,只要在shell中就一定可以运行这个命令。

    知识点2:怎么确定一个命令是否是内建命令?

    使用type可以区分,例如cd,cat,ifconfig

    1. type cd----->cd is a shell builtin
    2. type ifconfig----->ifconfig is /sbin/ifconfig
    3. type cat----->cat is /bin/cat

    由此可见,cd 是一个 Shell 内建命令,而 ifconfig 是一个外部文件,它的位置是/sbin/ifconfig

    知识点3:运行内置命令与普通命令的区别?

    系统变量$PATH 包含的目录中几乎聚集了系统中绝大多数的可执行命令,它们都是外部命令。
    通常来说,内建命令会比外部命令执行得更快,执行外部命令时不但会触发磁盘 I/O,还需要 fork 出一个单独的进程来执行,执行完成后再退出。而执行内建命令相当于调用当前 Shell 进程的一个函数。

     

    Bash Shell 中的内建命令

    命令说明用法实例
    : 扩展参数列表,执行重定向操作    
    . 读取并执行指定文件中的命令(在当前 shell 环境中)    
    alias 为指定命令定义一个别名

    1.查看当前进程中的所有别名 alias

    2.在当前进程中设置别名alias new_name='command'

    别名只是临时的,在代码中使用 alias 命令定义的别名只能在当前 Shell 进程中使用,在子进程和其它进程中都不能使用。当前 Shell 进程结束后,别名也随之消失。

    3.要想让别名对所有的 Shell 进程都有效,就得把别名写入 Shell 配置文件

    4.unalias后跟上某个命令的别名,用于删除指定的别名

    5.unalias后跟上-a,删除当前 Shell 进程中所有的别名。

    设置别名

    alias timestamp='date +%s'

    执行timestamp输出(当前时间戳)

    删除别名

    unalias ll

    再次执行ll报(-bash: ll: 未找到命令)

     

    bg 将作业以后台模式运行    
    bind 将键盘序列绑定到一个 readline 函数或宏    
    break 退出 for、while、select 或 until 循环    
    builtin 执行指定的 shell 内建命令    
    caller 返回活动子函数调用的上下文    
    cd 将当前目录切换为指定的目录    
    command 执行指定的命令,无需进行通常的 shell 查找    
    compgen 为指定单词生成可能的补全匹配    
    complete 显示指定的单词是如何补全的    
    compopt 修改指定单词的补全选项    
    continue 继续执行 for、while、select 或 until 循环的下一次迭代    
    declare 声明一个变量或变量类型。    
    dirs 显示当前存储目录的列表    
    disown 从进程作业表中刪除指定的作业    
    echo

    将指定字符串输出到 STDOUT

     
    enable 启用或禁用指定的内建shell命令    
    eval 将指定的参数拼接成一个命令,然后执行该命令    
    exec 用指定命令替换 shell 进程    
    exit

    强制当前shell进程以指定的退出状态码退出

    使用$?可以接收这个退出状态

    exit 命令可以接受一个整数值作为参数,代表退出状态。如果不指定,默认状态值是 0。exit 退出状态只能是一个介于 0~255 之间的整数,其中只有 0 表示成功,其它值都表示失败。

    Shell 进程执行出错时,可以根据退出状态来判断具体出现了什么错误,比如打开一个文件时,我们可以指定 1 表示文件不存在,2 表示文件没有读取权限,3 表示文件类型不对。
    1. #!/bin/bash
    2. echo "befor exit"
    3. exit 8
    4. echo "after exit"
    运行该脚本:bash ./test.sh———>befor exit
    可以看到,"after exit"并没有输出,这说明遇到 exit 命令后,test.sh 执行就结束了。
    注意,exit 表示退出当前 Shell 进程,我们必须在新进程中运行 test.sh,否则当前 Shell 会话(终端窗口)会被关闭,我们就无法看到输出结果了。
    我们可以紧接着使用$?来获取 test.sh 的退出状态:

    echo $?————>8

    export 设置子 shell 进程可用的变量    
    fc 从历史记录中选择命令列表    
    fg 将作业以前台模式运行    
    getopts 分析指定的位置参数    
    hash 查找并记住指定命令的全路径名    
    help 显示帮助文件    
    history 显示命令历史记录    
    jobs 列出活动作业    
    kill 向指定的进程 ID(PID) 发送一个系统信号    
    let 计算一个数学表达式中的每个参数    
    local 在函数中创建一个作用域受限的变量    
    logout 退出登录 shell    
    mapfile 从 STDIN 读取数据行,并将其加入索引数组    
    popd 从目录栈中删除记录    
    printf 使用格式化字符串显示文本    
    pushd 向目录栈添加一个目录    
    pwd 显示当前工作目录的路径名    
    read 从 STDIN 读取一行数据并将其赋给一个变量。  
    readarray 从 STDIN 读取数据行并将其放入索引数组    
    readonly 从 STDIN 读取一行数据并将其赋给一个不可修改的变量    
    return 强制函数以某个值退出,这个值可以被调用脚本提取    
    set 设置并显示环境变量的值和 shell 属性    
    shift 将位置参数依次向下降一个位置    
    shopt 打开/关闭控制 shell 可选行为的变量值    
    source 读取并执行指定文件中的命令(在当前 shell 环境中)    
    suspend 暂停 Shell 的执行,直到收到一个 SIGCONT 信号    
    test 基于指定条件返回退出状态码 0 或 1    
    times 显示累计的用户和系统时间    
    trap 如果收到了指定的系统信号,执行指定的命令    
    type 显示指定的单词如果作为命令将会如何被解释    
    typeset 声明一个变量或变量类型。 基本上已弃用  
    ulimit 为系统用户设置指定的资源的上限    
    umask 为新建的文件和目录设置默认权限    
    unalias 刪除指定的别名    
    unset 刪除指定的环境变量或 shell 属性    
    wait 等待指定的进程完成,并返回退出状态码    



  • 相关阅读:
    C# 消息队列 RabbitMQ
    C# webapi简单学习
    Navicat Premium 12注册机使用教程
    .net WCF简单练习
    MSDN 我告诉你(资源库)
    Dapper查询返回Datatable
    day55 无连接,无状态,会话跟踪、cookie、django中操作cookie、session、django中操作session
    day54 锁和事务、ajax、中间件
    day53 url别名反向解析、ORM多表操作、聚合查询、分组查询、F查询、Q查询
    day52
  • 原文地址:https://www.cnblogs.com/ting152/p/12519450.html
Copyright © 2011-2022 走看看