• Shell学习之Shell特性(一)


    Shell学习之Shell特性

    目录

     

    命令和文件自动补齐功能

     这个不说了,我们在输入命令的时候,按tab键补全。

    命令历史记忆功能  history、上下键、!number、!string、!$、!!

    history:历史命令记录
    上下键:切换历史命令
    !number:执行对应number的历史命令
    !string:重新执行一遍含有string的最近的历史命令
    !$:
    !!:执行上一条命令
    

      

    别名功能 alias、unalias cp、~username/.bashrc、cp -rf /etc/hosts

    alias:查看临时别名
    alias 别名='命令':定义别名
    unalias 别名:删除别名
    命令 [选项] [参数]:跳过别名,如果这个命令定义了别名,但是你不想使用别名,可以这么用
    

      

    另外定义永久的别名:
    超级用户root的配置文件:.bashrc
    普通用户的配置文件:~username/.bashrc
    (前面这个符号代表家目录)
    

      

    快捷键

    ^R:搜索历史命令,通过命令里包含的字符
    ^D:退出,相当于exit
    ^A:将光标移到最前面
    ^E:将光标移到后面
    ^L:删除光标后面一个字符
    ^U:删除光标前面一个字符
    ^K:截去光标后面的内容
    ^S:锁屏
    ^Q:解屏
    

      

    前后台作业控制

    &命令

    注:
    1.需要用户交互的命令不要放在后台执行,否则机器一直等待输入
    2.后台程序在执行时,执行结果仍然会输出到屏幕,干扰我们的工作, 建议将这样的信息重定向到某个文件
    3.在命令后面加上&可以将命令放到后台执行,如果退出终端,则无效,只在本次会话有效
    

      

    将这段代码放到后台执行,直接在后面加&。
    sleep 300 & 如果让这个命令能在下次登陆也能生效,怎么解决? 在命令前面加上nohup nohup sleep 6000 &


    screen命令

    ,生成一个会话,可以一直使用
    比如我们登陆到一个linux系统,先生成一个会话,不会影响你现在的工作,你该干什么干什么,会记录所有当前会话内容,下次登陆,可以切换到你上次工作的会话下。
    
    screen:生成一个会话
    
    screen -s [会话名]:生成一个命名的会话
    
    screen -list:查看所有会话
    
    screen -r [number]:切换会话
    

    辅助命令

    我们知道当有任务在前台工作时,任务会占用终端,你此时不能在终端工作,除非你再开启一个终端
    ^C:杀掉正在运行的前台任务
    ^Z:将正在运行的前台任务暂停到后台
    bg:让任务在后台工作,bg [number]
    fg:让任务回到前台工作,fg [number]
    kill number:给pid为number的进程发信息
    kill %[number]:给当前shell中作业号为number的发信息
    ps: 列出系统中正在运行的进程
    jobs:查看当前有多少在后台运行的命令
    

      

     

    输入输出重定向

    当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件:

    系统中实际上有12个描述符,可以任意使用文件描述符3-9
    标准输入	对应文件描述符0,是命令的输入,默认是键盘
    标准输出	对应文件描述符1,是命令的输出,默认是终端
    标准错误	对应文件描述符2,是命令错误的输出,默认是终端
    

      

    利用文件重定向功能对命令的标准输入,输出和错误进行修改:
    
    常用文件重定向命令:
    command >file:		标准输出重定向到一个文件,错误仍然输出屏幕
    command >>file:	标准输出重定向到一个文件(追加) 
    command 1>file1:	标准输出重定向到一个文件
    command 2>>file2:      标准错误重定向到一个文件(追加)
    command 1>file 2>&1:   标准输出和标准错误一起重定向到一个文件
    command 1>>file 2>&1:	标准输出和标准错误一起重定向到一个文件(追加)
    command < file1 >file2:以file1做为标准输入,file2做为标准输出
    command <file:		以file做为文件标准输入
    
    注:上面的command>file 2>&1 可以修改为command>file 2>>file
    

      

    例子

    重定向标准输出:
    例: ls –l >>myfile.out
    
    重定向标准输入:
    例: sort < name.txt	> name.out
    从name.txt读入数据进行排序,然后将排序结果输出到文件name.out中
    
    重定向标准错误
    例: ls ddd 2> /dev/null
    ddd不存在,标准错误信息会输送到系统垃圾箱,而不会输送到屏幕如果标准错误信息有用,可以将其存放到错误文件中
    
    
    
    使用文件重定向功能将MySQL-client-5.0.16-0.i386.rpm的包说明信息追加到
    mysql_install.log 文件中。
    
    rpm -qi MySQL-client-5.0.16-0.i386.rpm >>mysql_install.log
    
    
    
    使用文件重定向功能将ls ddd的错误信息保存在错误日志error.log文件中, 说明:ddd 目录并不存在。
    ls ddd 2>error.log
    
    
    编写脚本,实现功能:读取文件myfile中一行数据,并通过echo打印出来
    #!/bin/bash
    read data </root/myfile
    echo $data
    

      

    输入和输出

    输出echo

    echo命令:用来显示文本行或变量取值,或者把字符串输入到文件中。
    格式:echo string
    
    echo的常用功能:c不换行 f不进纸 	跳格 
    换行
    注意:
    	对于linux系统,必须使用-e选项来使以上转义符生效
    	例:$echo -e "hello	boy"
        	    $hello     boy
    
    	echo命令对特殊字符敏感,如果要输出特殊字符,需要用屏蔽特殊含义
    	常用的特殊字符:双引号""
    	例:$echo """"
    	    $""
    

      

    例子

    编写shell脚本,借助echo命令分别输出系统中SHELL,PATH变量的取值
    
    脚本:
    echo $SHELL,$PATH
    
    
    编写shell脚本,使用一个echo命令输出如下格式的内容(注意对齐格式):
    id	name	msg
    01	mike	"hello"
    02	john	"hi"
    
    脚本:
    echo -e "id	name	msg
    01	mike	"hello"
    02	john	"hi""
    

      

    输入read

    从键盘或者文件的某一行文本读入信息,并将其赋给一个变量。
    
    格式:read var1 var2 ...
    

      

    注意:如果输入的值个数多于变量的个数,多余的值会赋给最后一个变量。

    例子

    编写shell脚本,实现功能:接收用户输入的值,并显示在屏幕。
    
    脚本:
    #!/bin/bash
    read name
    echo $name
    
    
    编写shell脚本,使用read命令读取user和password变量
    第一次:输入 mike 1234567
    第二次:输入 mike 
    第三次:输入mike john 123456
    分别使用echo命令查看user,password的取值,比较有何不同?
    
    
    脚本:
    #!/bin/bash
    read user password
    echo $user $password
    

      

    管道 | tee

    管道

    可以通过管道把一个命令的输出传递给另一个命令做为输入
    格式:命令1 | 命令2
    示例:cat test.txt | grep 'hello'
    

      

    例子

    编写shell脚本,对文件file1,file2,file3内容合并,并对每行进行编号。
    
    
    脚本:
    cat -n file1 file2 file3 > file4.txt
    

      

    tee命令

    把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中,如果想看到输出的同时,把输出也同时拷入一个文件,这个命令很合适。
    
    格式:tee -a file
    -a 表示文件追加到末尾
    file 表示保存输出信息的文件
    
    tee命令一般和管道符 | 结合起来使用
    例子:who | tee who.info
    该命令的信息返回在屏幕上,同时保存在文件who.info中
    

      

    例子

    1.使用tee命令将当前系统中所有进程信息保存到文件pid_info中
    
    
    脚本:
    #!/bin/bash
    top | tee pid_info
    
    
    
    2.使用tee命令和who命令将当前系统中登陆的终端信息追加到文件login_info中
    
    脚本:
    #!/bin/bash
    who | tee -a login_info
    

      

    命令排序

    如果你想在执行多个命令,可以使用下面三种分隔符
    ; && ||
    
    ; 不具备逻辑判断,不关心前面的命令是否执行成功,后面的命令怎样都会执行
    示例:cd;cat file
    
    
    && 具备逻辑判断,前面的命令执行成功,后面的命令才能执行
    
    
    || 具备逻辑判断,前面的命令执行不成功,后面的命令才能执行
    

      

  • 相关阅读:
    音律入门
    [转]MIDI常识20条
    Java使用代理服务器
    java8日期时间
    误删课表系统
    Uncaught Error: Bootstrap tooltips require Tether (http://github.hubspot.com/tether/)
    SpringBoot应用部署[转]
    如何学习新技术
    Maven使用archetype迅速生成项目骨架
    两个月打工总结
  • 原文地址:https://www.cnblogs.com/-wenli/p/10360685.html
Copyright © 2020-2023  润新知