一.快捷键、通配符、特殊符号

1. 快捷键

CTRL+C:终止目前的命令

CTRL+D:输入结束,EOF

CTRL+M:ENTER

CTRL+S:暂停屏幕输出

CTRL+Q:恢复屏幕输出

CTRL+U:将整行命令删除

CTRL+Z:暂停目前的命令

2.通配符

*  任意多个字符

? 任意1个字符

[] 1个括号中的字符,例如[abcd]表示a/b/c/d中的任意1个

[-] 在编码顺序内的所有字符,例如[0-9]表示0,1,2,3,4,5,6,7,8,9所有这些数

[^] 反向选择,[^abc]表示只要不是a/b/c的字符

3.特殊符号

# 注释

\ 转移符

| 管道,分隔两个管道命令

; 连续命令分隔

~ 用户主文件夹  home/username

$ 变量前导符,使用变量时需要添加

& 后台工作

! 非

/ 目录

>,>> 数据流重定向,输出, >替换,>>累加

<,<< 数据流重定向,输入

' '  单引号内的特殊符号失去特殊意义

" "  双引号内的特殊符号保留特殊意义

·· 反向单引号,可以执行命令

() 括号内为子shell

{} 命令块组合

二、数据流重定向

标准输出stdout:命令执行正确,输出的信息,一般默认为屏幕,代码为1,使用>或>>

错误输出stderr:命令执行错误,输出的信息,一般默认为屏幕,代码为2,使用2>或2>>

标准输入stdin:代码为0,使用<或<<

@ubuntu:~/test$ ls ./no_dir
ls: cannot access ./no_dir: No such file or directory
@ubuntu:~/test$ ls ./no_dir >ls_err   // standard err 信息重定位到文件ls_err中,屏幕不再显示
@ubuntu:~/test$ cat ls_err         // ls_err文件中保存了刚才的standard err信息
ls: cannot access ./no_dir: No such file or directory
@ubuntu:~/test$ ls ./no_dir >>ls_err  // >>累加
@ubuntu:~/test$ cat ls_err
ls: cannot access ./no_dir: No such file or directory
ls: cannot access ./no_dir: No such file or directory
@ubuntu:~/test$ ls ./no_dir > /dev/null // /dev/null垃圾桶,能吃掉任何导入到此设备的信息

特殊需求:把stdout和stderr都输出到同一文件中

 >out_file  >out_file        // 不对,stdout和stderr同时输出,out_file可能顺序混乱
>out_file 2>&1 // 正确, &1很关键,&表示1不是文件,而是stdou

三 命令执行顺序

cmd1  ;  cmd2  // com1和com2顺序执行,没有条件
cmd1 && cmd2  // if(cmd1正确) cmd2
cmd1 || cmd2  // if(cmd1不正确) cmd2

&&和||的组合,一般遵循 cmd1 && cmd2 || cmd3, cmd1可能成功或失败,cmd2和cmd3一般都是成功的

*@ubuntu:~/test$ ls no_dir &&  echo "exist" || echo "not exit"
ls: cannot access no_dir: No such file or directory
not exit
*@ubuntu:~/test$ ls no_dir || echo "not exist" && echo "exit"  // 与预期不符合,cmd2执行成功,cmd3也执行了
ls: cannot access no_dir: No such file or directory
not exist
exit

四 管道及管道命令

1.管道

前一个命令的stdout作为后一个命令的stdin,不是所有命令都能接收前一个命令的数据,例如ls,cp等就不行。

~$ ls /etc | less  // ls /etc的stdout是一堆文件,这些信息作为less的stdin

2.选取命令:cut,grep

(1)cut:从一行数据中切出某一段
cut -d '分割字符' -f fields   // 用-d后面的分隔符把一段信息分割成几段,然后用-f取出第几段
cut -c 字符范围 // 以字符范围取出固定个字符
:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
:~$ echo $PATH | cut -c 5-  #从第5个字符取到结尾
/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
:~$ echo $PATH | cut -c 5-10 #取字符5-10
/local
:~$ echo $PATH | cut -d ':' -f 3  #以:为分隔符,取第3段
/usr/sbin

 (2)grep:分析一行数据,如果有我们所需要的信息,就将该行拿出来。

grep [-acinv] [--color=auto] '查找字符串' filename

-a:将binary文件以text文件的方式查找数据

-c:计算'查找字符串'的次数

-i:忽略大小写

-n:输出行号

-v:反向选择

--color=auto:关键字加颜色显示

:/$ ls -lh / | grep -n 'bin'
:drwxr-xr-x root root .0K 12月 : bin
:drwxr-xr-x root root 12K 12月 : sbin

3.排序命令:sort,wc,uniq

(1).sort:排序,依据不同的数据类型排序

sort [-fbMnrtuk]  [file or stdin]

-f:忽略大小写

-b:忽略最前面的空格

-M:以月份的名字排序

-n:使用纯数字排序,默认是文字类型

-r:反向排序

-u:uniq,相同的数据,仅列出1行

-t:分隔符,默认tab

-k:以哪个区间进行排序,一般与-t连用

:/$ cat /etc/passwd | sort  #首字符排序
_apt:x::::/nonexistent:/bin/false
avahi-autoipd:x:::Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
avahi:x:::Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
backup:x:::backup:/var/backups:/usr/sbin/nologin
bin:x:::bin:/bin:/usr/sbin/nologin
colord:x:::colord colour management daemon,,,:/var/lib/colord:/bin/false
......
liuwanpeng@liuwanpeng-virtual-machine:/$ cat /etc/passwd | sort -t ':' -k 3  #:分隔后的第三个段排序,默认字符
root:x:0::root:/root:/bin/bash
liuwanpeng:x:1000::liuwanpeng,,,:/home/liuwanpeng:/bin/bash
systemd-timesync:x:::systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:::systemd Network Management,,,:/run/systemd/netif:/bin/false
usbmux:x:::usbmux daemon,,,:/var/lib/usbmux:/bin/false
......
liuwanpeng@liuwanpeng-virtual-machine:/$ cat /etc/passwd | sort -t ':' -k -n  #:分隔后的第三个段排序,按数字排序
root:x:::root:/root:/bin/bash
daemon:x:::daemon:/usr/sbin:/usr/sbin/nologin
bin:x:::bin:/bin:/usr/sbin/nologin
......

(2).wc:数数字,多少字,多少行,多少字符

wc [-lwm]

-l:列出行数

w:列出多少字(英文单子)

m:多少字符

:/$ cat /etc/passwd |wc
2545  #45行 74字数 2545字符

(3).uniq:重复的数据仅显示1个

uniq [-ic]

-i:忽略大小写

-c:进行计数

4.双向重定向:tee

同时向stdout和file中存放结果

tee [-a] file

-a:累加方式

:~$ ls / | tee ~/ls_result  #在屏幕显示结果的同时,将结果存入文件ls_result中

5.字符转换命令:tr,col,join,paste,expand

(1).tr:删除或替换一段信息中的文字,!只能等字符替换

tr [-ds] SET1 [SET2]

-d:删除SET1字符串

-s:替换掉重复的字符

:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:~$ echo $PATH | tr -d 'bin'  #删除bin
/usr/local/s:/usr/local/:/usr/s:/usr/:/s:/:/usr/games:/usr/local/games:~$ echo $PATH | tr 'bin' 'bin_replace'  #没达到效果,只能等字符替换
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:~$ echo $PATH | tr 'bin' 'replace'
/usr/local/srep:/usr/local/rep:/usr/srep:/usr/rep:/srep:/rep:/usr/games:/usr/local/games:~$ echo $PATH | tr 'bin' 'nib'
/usr/local/snib:/usr/local/nib:/usr/snib:/usr/nib:/snib:/nib:/usr/games:/usr/local/games

(2).col:

col [-xb]

-x:将TAB键换成对等的空格键

-b:文字中有反斜杠/时,只保留反斜杠最后接的那个字符

(3).join:将两个文件有相同数据的那一行加在一起,处理两个相关文件时比较有用

jion [-ti12] field1 field2

-t:分隔符,默认为空格,且默认对比第1个字符

-i:忽略大小写

-1:要用第一个文件的哪个字段比对

-2:要用第二个文件的哪个字段对比

:~$ sudo head -n  /etc/passwd /etc/shadow
==> /etc/passwd <==
root:x:::root:/root:/bin/bash
daemon:x:::daemon:/usr/sbin:/usr/sbin/nologin
bin:x:::bin:/bin:/usr/sbin/nologin ==> /etc/shadow <==
root:!:::::::
daemon:*:::::::
bin:*:::::::

:~$ sudo join -t ':' - - /etc/passwd /etc/shadow
:root:x::root:/root:/bin/bash:root:!::::::    #第2个文件的第4个元素不显示了
:root:x::root:/root:/bin/bash:daemon:*::::::
:root:x::root:/root:/bin/bash:bin:*::::::

(4).paste:直接将两行粘贴到一起,中间用tab键隔开

paste [-d] file1 file2

-d:分隔符,默认是tab

-:如果file部分是-,表示标准输入stdin,可以理解成paste不能直接读取stdin,需要通过“-”把stdin转换成命令的输入文件

liuwanpeng@liuwanpeng-virtual-machine:~$ sudo paste /etc/passwd /etc/shadow | head -n
root:x:::root:/root:/bin/bash root:!:::::::
daemon:x:::daemon:/usr/sbin:/usr/sbin/nologin daemon:*:::::::
bin:x:::bin:/bin:/usr/sbin/nologin bin:*::::::: liuwanpeng@liuwanpeng-virtual-machine:~$ sudo cat /etc/group |sudo paste /etc/passwd /etc/shadow - | head -n
root:x:::root:/root:/bin/bash root:!::::::: root:x::
daemon:x:::daemon:/usr/sbin:/usr/sbin/nologin daemon:*::::::: daemon:x::
bin:x:::bin:/bin:/usr/sbin/nologin bin:*::::::: bin:x::

(5).expand:将tab键转换成空格键

expand [-t] file

-t:默认tab=8空格,也可以在-t后面加数字自己设置空格的数量

6.切割命令:split

把大文件依据文件大小或行数切割成小文件

split [-bl] file PREFIX

-b:文件大小,单位可用b、k、m

-l:以行数切割

:/work/platform-zynq/linux-xlnx-repo-smp/arch/arm/boot$ split -b 1m uImage uImage  #切割:/work/platform-zynq/linux-xlnx-repo-smp/arch/arm/boot$ cat uImagea* >> uImage_new   #合成新文件
:/work/platform-zynq/linux-xlnx-repo-smp/arch/arm/boot$ ls -lh
总用量 20M-rw-rw-r-- liuwanpeng liuwanpeng 3.3M 12月 : uImage
-rw-rw-r-- liuwanpeng liuwanpeng 1.0M 12月 : uImageaa
-rw-rw-r-- liuwanpeng liuwanpeng 1.0M 12月 : uImageab
-rw-rw-r-- liuwanpeng liuwanpeng 1.0M 12月 : uImageac
-rw-rw-r-- liuwanpeng liuwanpeng 239K 12月 : uImagead
-rw-rw-r-- liuwanpeng liuwanpeng 3.3M 12月 : uImage_new    #与uImage大小一样

7.参数代换:xargs

产生命令的参数,而不是产生命令的输入,用例子说明最明白

:~/test$ ls  #两个文件
file1 file2
:~/test$ cat file1 file2 #两个文件的内容
this is file 1
this is file 2
:~/test$ find -name "*"
.
./file2
./file1
:~/test$ find -name "*" |grep 'file'  #在find命令的stdout信息中找file,能找到
./file2
./file1
:~/test$ find -name "*" |grep 'this'  #在find命令的stdout信息中找this,肯定内有,因为this在文件的内容里:~/test$ find -name "*" |xargs grep 'this’ #把find找到的两个文件作为参数传给grep,grep在这两个文件里找this,找到了
grep: .: 是一个目录
./file2:this is file
./file1:this is file 1
:~/test$  grep 'this' file1 file2  #使用xargs后相当于此命令
file1:this is file 1
file2:this is file 2

8.减号-的作用

替代stdout或者stdin

tar -cvf - /home | tar -xvf -    #第一个减号,表示tar包不存到文件,而是存到stdout
                     #管道把第一个命令的stdout(tar包)转化为第二个命令的stdin
#第二个-号表示解压stdin

shell及脚本2——shell 环境及命令的更多相关文章

  1. shell及脚本4——shell script

    一.格式 1.1 开头 必须以 "# !/bin/bash"  开头,告诉系统这是一个bash shell脚本.注意#与!中间有空格. 二.语法 2.1 数值运算 可以用decla ...

  2. Shell脚本字符串匹配及日常命令工具 - 用法总结(技巧指南)

    Shell提供了很多字符串和文件处理的命令,如awk.expr.grep.sed等命令,还有文件的排序.合并和分割等一系列的操作命令.下面重点总结下Shell字符串处理.文本处理以及各类命令及函数用法 ...

  3. shell 编程 && bash 简介(shell 变量、shell操作环境、数据流重导向、管线命令、shell script)

    如何学习一门编程语言 数据类型 运算符 关键字 1 认识BASH 这个shell linux是操作系统核心,用户通过shell与核心进行沟通,达到我们想要的目的.硬件.核心.用户之间的关系: 原理:所 ...

  4. Linux Shell脚本入门--cut命令

    Linux Shell脚本入门--cut命令 cut cut 命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields &l ...

  5. shell脚本编程-使用结构化命令(if/else)(转)

    11.1 使用if-then语句 格式如下 if语句会执行if行定义的那个命令,如果该命令的退出状态码是0,则then部分的语句就会执行,其他值,则不会   1 2 3 4 if command th ...

  6. shell脚本中判断上一个命令是否执行成功

    shell脚本中判断上一个命令是否执行成功 shell中使用符号“$?”来显示上一条命令执行的返回值,如果为0则代表执行成功,其他表示失败.结合if-else语句实现判断上一个命令是否执行成功. 示例 ...

  7. Linux Shell脚本入门--wget 命令用法详解

    Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...

  8. linux shell 脚本攻略学习20--awk命令入门详解

    awk生于1977年,创始人有三个,分别为 Alfred Aho,Peter Weinberger, 和 Brian Kernighan,名称源于三个创始人的姓的首字母. 作用:处理文本文件. awk ...

  9. centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课

    centos  shell脚本编程2 if 判断  case判断   shell脚本中的循环  for   while   shell中的函数  break  continue  test 命令   ...

随机推荐

  1. 在docker容器中vi指令找不到

    在使用docker容器时,有时候里边没有安装vi,敲vi命令时提示说:vi: command not found,这个时候就需要安装vi,可是当你敲apt-get install vi命令时,提示: ...

  2. Mybatis框架的模糊查询(多种写法)、删除、添加(四)

    学习Mybatis这么多天,那么我给大家分享一下我的学习成果.从最基础的开始配置. 一.创建一个web项目,看一下项目架构 二.说道项目就会想到需要什么jar 三.就是准备大配置链接Orcl数据库 & ...

  3. 解决springmvc+mybatis+mysql中文乱码问题【转】

    这篇文章主要介绍了解决java中springmvc+mybatis+mysql中文乱码问题的相关资料,需要的朋友可以参考下 近日使用ajax请求springmvc后台查询mysql数据库,页面显示中文 ...

  4. Android开发学习—— activity

    activity生命周期 #Activity生命周期###void onCreate()* Activity已经被创建完毕###void onStart()* Activity已经显示在屏幕,但没有得 ...

  5. 关于case语句中声明变量并初始化的注意事项

    今天看到一句对这个问题特别精辟的总结,记录如下: It is possible to transfer into a block, but not in a way that bypasses dec ...

  6. AngularJS HTML DOM& 事件

    AngularJS 为 HTML DOM 元素的属性提供了绑定应用数据的指令. ng-disabled 指令直接绑定应用程序数据到 HTML 的 disabled 属性 <div ng-app= ...

  7. 让OData和NHibernate结合进行动态查询

    OData是一个非常灵活的RESTful API,如果要做出强大的查询API,那么OData就强烈推荐了.http://www.odata.org/ OData的特点就是可以根据传入参数动态生成Ent ...

  8. 华为手机浏览器不支持PUT提交方式的解决方案

    最近所在技术团队在开发webapp项目,前端angularjs+后端.Net MVC API,API登录接口定义为PUT提交方式,在做兼容测试时发现UC.safari.微信浏览器下都可以登录,但在华为 ...

  9. VS2015安装之后加装SQL SERVER2014的步骤

    网上一直说的是先安装SQL Server 2014,再安装VS2015,软件就不会出现问题.我这次在什么都没准备的情况下安装了VS2015,安装之后发觉VS2015自带的SQL2014只有连接服务器和 ...

  10. 基于IIS构建Pyathon Web服务

    本文简单叙述了在Windows下,如何利用IIS构建Python Web服务. 其主要步骤如下: 1.在IIS下构建一个站点,如图: 2.配置Python文件的处理程序,如图: 3.最后,在对应站点根 ...