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不进纸 \t跳格 \n换行
注意:
对于linux系统,必须使用-e选项来使以上转义符生效
例:$echo -e "hello\tboy"
$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\tname\tmsg\n01\tmike\t\"hello\"\n02\tjohn\t\"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 && 具备逻辑判断,前面的命令执行成功,后面的命令才能执行 || 具备逻辑判断,前面的命令执行不成功,后面的命令才能执行

  

Shell学习之Shell特性(一)的更多相关文章

  1. Shell学习笔记 - Shell变量

    一.变量的命名 变量名必须以字母或下划线开头,由字母.数字.或下划线组成,变量名的长度不能超过255个字符. 二.变量的分类 1. 用户自定义变量 2. 环境变量 3. 位置参数变量 4. 预定义变量 ...

  2. linux shell学习之shell流程控制

    在linux shell编程中,流程控制结构与语句,也算是shell脚本中的重点了,不了解的朋友,跟随脚本小编一起来学习下吧. linux控制流结构学习. 一,shell控制流结构 1.控制结构   ...

  3. Shell学习——子shell操作记录转储

    概述 主要介绍子shell历史操作记录的保存以及解析,比如python, scala等,用于(准)实时监控用户行为. 背景 一级shell的历史操作记录已由系统实现,当用户从开始登录shell(这里指 ...

  4. shell学习——关于shell函数库的使用

    shell函数库的理解: 个人理解,shell函数库实质为一个脚本,脚本内包含了多个函数(函数具有普遍适用性). shell函数库的调用: 通过  . /path/lib/file.lib 或者 so ...

  5. [Bash Shell] Shell学习笔记

    1. Shell简介 Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命 ...

  6. shell学习总结之自定义函数

    shell学习总结之自定义函数 Myfun (){ echo -n "now i is $i " ! [ "$i" ] && exit ; ec ...

  7. shell学习笔记

    shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...

  8. [转帖][Bash Shell] Shell学习笔记

    [Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html  阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...

  9. Shell 学习—AWK介绍

    Shell 学习—AWK = = = 安装awk root@kiki-desktop:~/shell# apt-get install gawk gawk-doc = = = awk 是一种程序语言. ...

随机推荐

  1. day3 进入指定目录:cd

    想进入指定目录使用cd cd 目录名 进入指定目录 进入系统根目录:cd / 回退命令:cd .. 或者 cd ../ 或者 cd ..// 进入当前用户的主目录:cd 或者 cd ~ 跳转指定目录: ...

  2. [JXOI2018]游戏 (线性筛,数论)

    [JXOI2018]游戏 \(solution:\) 这一道题的原版题面实在太负能量了,所以用了修改版题面. 这道题只要仔细读题,我们就可以将题目的一些基本性质分析出来:首先我们定义:对于某一类都可以 ...

  3. ROS学习笔记(二) # ROS NodeHandles

    1. 自动启动和关闭 ros::NodeHandle nh: 这段代码执行之后,如果内部节点还没有启动,ros::NodeHandle 会启动这个节点:一旦所有的 ros::NodeHandle 实例 ...

  4. 使用python中的matplotlib 画图,show后关闭窗口,继续运行命令

    使用python中的matplotlib 画图,show后关闭窗口,继续运行命令 在用python中的matplotlib 画图时,show()函数总是要放在最后,且它阻止命令继续往下运行,直到1.0 ...

  5. HTML学习笔记04-样式

    HTML<style>属性 style属性的作用: 提供了一种改变所有HTML元素样式的通用方法 background-colco属性为元素定义了背景颜色: <!DOCTYPE HT ...

  6. bat判断ini文件内容

    @echo off for /f "tokens=1" %%d in (config.ini) do ( if /I "%%d" equ "path= ...

  7. centos 6.5环境利用iscsi搭建SAN网络存储服务及服务端target和客户端initiator配置详解

    一.简介 iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够 ...

  8. 对比synchronized与java.util.concurrent.locks.Lock 的异同

    主要区别 1.Lock能完成几乎所有synchronized的功能,并有一些后者不具备的功能,如公平锁.等待可中断.锁绑定多个条件等: 2.synchronized 是Java 语言层面的,是内置的关 ...

  9. javascript NaN注意事项

    NaN直译是Not a number NaN是个特殊的number,它和任何值相比都不相等,甚至和它自己. NaN === NaN 这个表达式是false 唯一能判断NaN的方法是 IsNaN(NaN ...

  10. java 数据的存储

    1. 寄存器. 这是最快的存储区,因为它位于不同于其他存储区的地方 -- 处理器的内部.但是寄存器的数量极其有限,所以寄存器根据需求进行分配.你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象. ...