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

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. PDF编辑神器

    转自网络 http://files.cnblogs.com/files/quejuwen/pdfeditportable.zip

  2. Delphi_05_Delphi_Object_Pascal_基本语法_03

    继续Delphi的学习之旅, 废话不多说,直接贴代码. { Delphi基本语法 1.对象 2.指针 3.类型别名 和 类型转换 } program DelphiObject; {$APPTYPE C ...

  3. 如何在VS 2010中使用 VS2013的解决方案(转)

    今天要用VS2010打开VS2013,一直觉得VS2010到VS2012只是界面上扁平化的改变,平台工具集有改变但很大程度上可能向上兼容.在网上搜了一些文章,其中有一篇说到一个观点:        从 ...

  4. ArrayList LinkedList源码解析

    在java中,集合这一数据结构应用广泛,应用最多的莫过于List接口下面的ArrayList和LinkedList; 我们先说List, public interface List<E> ...

  5. Maven实战系列文章

    1.Maven命令行使用:mvn clean compile(编译) 2.Maven命令行使用:mvn clean package(打包) 3.Maven命令行使用:mvn clean install ...

  6. Android 手机卫士10--应用管理器

    1.添加不同类型条目 class MyAdapter extends BaseAdapter{ //获取数据适配器中条目类型的总数,修改成两种(纯文本,图片+文字) @Override public ...

  7. 深入理解javascript选择器API系列第一篇——4种元素选择器

    × 目录 [1]id属性 [2]标签名 [3]name属性[4]all 前面的话 说到最常见的DOM应用,恐怕就要数取得特定的某个或某组元素的引用了.DOM定义了许多方式来选取元素,包括getElem ...

  8. iOS陀螺仪 参数意义

    self.mManager = [[CMMotionManager alloc]init]; self.mManager.deviceMotionUpdateInterval = 0.5; if (s ...

  9. 在 CentOS7 上将自定义的 jar 包注册为 linux 服务 service

    在 CentOS7 上将自定义的 jar 包注册为 linux 服务 service 1.在 /etc/rc.d/init.d/ 目录下创建一个名字和服务名完全相同的 shell 脚本文件 joyup ...

  10. css选择器的使用详解

    -.css选择器的分类: 二.常用选择器详解: 1.标签选择器: 语法: 标签名 { 属性:属性值; } 代码示例: h1 { color: #ccc; font-size: 28px; } 2.类选 ...