管道(|)

管道 (|): 将一个命令的输出作为另外一个命令的输入。

 
管道同样可以在标准输入输出和标准错误输出间做代替工作,这样一来,可以将某一个程序的输出送到另一个程序的输入,其语法如下:
command1| command2 [| command3...]

也可以连同标准错误输出一起送入管道:

command1| &command2[|& command3...]

 
例如:
grep "hello" file.txt | wc -l 

在file.txt中搜索包含有”hello”的行并计算其行数。 在这里grep命令的输出作为wc命令的输入。当然您可以使用多个命令。

 
 
输入输出重定向
 
在Linux中,每一个进程都有三个特殊的文件描述指针:
  • 标准输入(standard input,文件描述指针为0)
  • 标准输出(standard output,文件描述指针为1)
  • 标准错误输出(standard error,文件描述指针为2)
 
这三个特殊的文件描述指针使进程在一般情况下接收标准输入终端的输入,同时由标准终端来显示输出,Linux同时也向使用者提供可以使用普通的文件或管道来取代这些标准输入输出设备。在shell中,使用者可以利用“>”和“<”来进行输入输出重定向。
 
重定向:将命令的结果输出到文件,而不是标准输出(屏幕)
如:

command>file:将命令的输出结果重定向到一个文件。
command>&file:将命令的标准错误输出一起重定向到一个文件。
command>>file:将标准输出的结果追加到文件中。
command>>&file:将标准输出和标准错误输出的结构都追加到文件中。

例如:

find /etc -name passwd > stdout 将标准输出存入stdout文件中,默认为1可以不写

find /etc -name passwd >errs >output 将错误输出存入errs文件中,标准输出存入output文件中

find /etc -name passwd >alloutlput >& 将标准输出、错误输出都存入到alloutout文件中

find /etc -name passwd &>alloutlput1 将所有信息存入到alloutput1文件中
常用特殊符号

1 反引号

 
使用反引号("`")可以将一个命令的输出作为另外一个命令的一个命令行参数。
命令: 
find . -mtime -1 -type f -print 

用来查找过去24小时(-mtime –2则表示过去48小时)内修改过的文件。如果您想将所有查找到的文件打一个包,则可以使用以下脚本:

#!/bin/sh
# The ticks are backticks (`) not normal quotes ('):
tar -zcvf lastmod.tar.gz `find . -mtime - -type f -print`
 

2 前台和后台

在shell下面,一个新产生的进程可以通过用命令后面的符号“;”和“&”来分别以前台和后台的方式来执行,语法如下:

command

产生一个前台的进程,下一个命令须等该命令运行结束后才能输入。

 
command &

产生一个后台的进程,此进程在后台运行的同时,可以输入其他的命令。

 
 

3 文件名代换(Globbing)

* 、?、 [] 这些用于匹配的字符称为通配符(Wildcard),具体如下:

表 - 通配符

* 匹配0个或多个任意字符
? 匹配一个任意字符
[若干字符] 匹配方括号中任意一个字符的一次出现
[^若干字符] 匹配任意一个字符的一次出现除了方括号中列出的
$ ls /dev/ttyS*
$ ls ch0?.doc
$ ls ch0[-].doc
$ ls ch[][-].doc

注意,Globbing所匹配的文件名是由Shell展开的,也就是说在参数还没传给程序之前已经展开了,比如上述ls ch0[012].doc命令,如果当前目录下有ch00.docch02.doc,则传给ls命令的参数实际上是这两个文件名,而不是一个匹配字符串。

4 命令代换:`或 $()

由反引号括起来的也是一条命令,Shell先执行该命令,然后将输出结果立刻代换到当前命令行中。例如定义一个变量存放date命令的输出:

$ DATE=`date`
$ echo $DATE

命令代换也可以用$()表示:

$ DATE=$(date)

5 转义字符\

和C语言类似,\在Shell中被用作转义字符,用于去除紧跟其后的单个字符的特殊意义(回车除外),换句话说,紧跟其后的字符取字面值。例如:

$ echo $SHELL /bin/bash
$ echo \$SHELL $SHELL
$ echo \\ \

比如创建一个文件名为“$ $”的文件可以这样:

$ touch \$\ \$

还有一个字符虽然不具有特殊含义,但是要用它做文件名也很麻烦,就是-号。如果要创建一个文件名以-号开头的文件,这样是不行的:

$ touch -hello 

touch: invalid option -- h 
Try `touch --help' for more information.

即使加上\转义也还是报错:

$ touch \-hello
touch: invalid option -- h
Try `touch --help' for more information.

因为各种UNIX命令都把-号开头的命令行参数当作命令的选项,而不会当作文件名。如果非要处理以-号开头的文件名,可以有两种办法:

$ touch ./-hello

或者

$ touch -- -hello

\还有一种用法,在\后敲回车表示续行,Shell并不会立刻执行命令,而是把光标移到下一行,给出一个续行提示符>,等待用户继续输入,最后把所有的续行接到一起当作一个命令执行。例如:

$ ls \
> -l (ls -l命令的输出)

6 单引号

和C语言不一样,Shell脚本中的单引号和双引号一样都是字符串的界定符(双引号下一节介绍),而不是字符的界定符。单引号用于保持引号内所有字符的字面值,即使引号内的\和回车也不例外,但是字符串中不能出现单引号。如果引号没有配对就输入回车,Shell会给出续行提示符,要求用户把引号配上对。例如:

$ echo '$SHELL' $SHELL
$ echo 'ABC\(回车) > DE'(再按一次回车结束命令) ABC\ DE

7 双引号

双引号用于保持引号内所有字符的字面值(回车也不例外),但以下情况除外:

  • $加变量名可以取变量的值

  • 反引号仍表示命令替换

  • \$表示$的字面值

  • \`表示`的字面值

  • \"表示"的字面值

  • \\表示\的字面值

除以上情况之外,在其它字符前面的\无特殊含义,只表示字面值
$ echo "$SHELL" 
/bin/bash

$ echo "`date`"
Sun Apr :: CEST

$ echo "I'd say: \"Go for it\""
I'd say: "Go for it"

$ echo "\"(回车) >"(再按一次回车结束命令)
"

$ echo "\\"
\
运算符

1 算术代换:$(()) 和 $[]

用于算术计算,$(())中的Shell变量取值将转换成整数,例如:

$ VAR=45
$ echo $(($VAR+3))
$ echo $[$VAR+4]

$(())中只能用+-*/%和()运算符,并且只能做整数运算。

2 expr 和 let 命令

 
expr 命令允许处理命令行中的等式。
expr [1+5]
 
 
3 declare 命令

功能说明:声明 shell 变量。

语  法:declare [+/-][rxi][变量名称=设置值] 或 declare -f

补充说明:declare为shell指令,在第一种语法中可用来声明变量并设置变量的属性([rix]即为变量的属性),在第二种语法中可用来显示shell函数。若不加上任何参数,则会显示全部的shell变量与函数(与执行set指令的效果相同)。

参  数:
 +/-  "-"可用来指定变量的属性,"+"则是取消变量所设的属性。
 -f  仅显示函数。
 r  将变量设置为只读。
 x  指定的变量会成为环境变量,可供shell以外的程序来使用。
 i  [设置值]可以是数值,字符串或运算式。

a   将变量声明为数组型

p   显示指定变量的被声明的类型

declare -i cc = $aa +$bb

4 变量测试

bc(bash 计算器)
 
bash 计算器实际上是一种编程语言,该语言允许在命令行中输入浮点表达式,然后解释表达式并计算它们。
 
bc 命令:
     bc 命令是用于命令行计算器。 它类似基本的计算器。 使用这个计算器可以做基本的数学运算。

语法:
  语法是 
     bc [命令开关]

命令开关:

-c 仅通过编译。 bc命令的输出被发送到标准输出。
-l 定义数学函数并且初始化值为20,取代默认值0。
filename 文件名,它包含用于计算的计算器命令,这不是必须的命令。

 
bash 计算器可以识别:
  • 数字(整数和浮点)
  • 变量
  • 注释
  • 表达式
  • 编程语句
  • 函数
示例
[root@localhost ~]# bc

bc 1.06

Copyright 1991-1994,1997,1998,2000 Free Software Foundation,Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
 
 9*2
18

上述命令是来做数学运算。

[root@localhost ~]# bc -l

bc 1.06
Copyright 1991-1994,1997,1998,2000 Free Software Foundation,Inc.

This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
 
1+2
3

上述命令是求'1+2'的和。

[root@localhost ~]# bc calc.txt

bc 1.06
Copyright 1991-1994,1997,1998,2000 Free Software Foundation,Inc.

This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
 
3

'calc.txt' 这个文件有代码:1+2。 从文件输入并且显示输出结果。

 
浮点算术被称为 scale 的内置变量控制。必须把这个值设置为想要的十进制小数位数。
例如
$ bc -q
3.44/5
0
scale=4
3.44/5
.6880
quit
$
 
在脚本中使用 bc
variable='echo "options; expression" | bc'
例如
var1='echo "  scale=4; 3.44 / 5"  | bc'
 
 
编码转换

在Linux中执行.sh脚本,异常提示/bin/sh^M: bad interpreter: No such file or directory。这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。

1)在windows下转换: 
利用一些编辑器如UltraEdit或EditPlus等工具先将脚本编码转换,再放到Linux中执行。转换方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。 
或者按Ctrl+H,将文本内容转换为十六进制,然后其中的0D 0A(Dos下的回车)替换为0A(Unix下的回车),但是这种方式还是要注意修改后保存时文本的类型,比较推荐的是下面第二种方式。

2)也可在Linux中转换: 
首先要确保文件有可执行权限 
#sh>chmod a+x filename

然后修改文件格式 
#sh>vi filename

利用如下命令查看文件格式 
:set ff 或 :set fileformat

可以看到如下信息 
fileformat=dos 或 fileformat=unix

利用如下命令修改文件格式 
:set ff=unix 或 :set fileformat=unix

:wq (存盘退出)

最后再执行文件 
#sh>./filename

 

Shell 常用特性的更多相关文章

  1. hbase基本概念和hbase shell常用命令用法

    1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实 ...

  2. 【转载】HBase基本概念和hbase shell常用命令用法

    1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实 ...

  3. 探索ASP.NET MVC5系列之~~~4.模型篇---包含模型常用特性和过度提交防御

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  4. ES6的一些常用特性

    由于公司的前端业务全部基于ES6开发,于是给自己开个小灶补补ES6的一些常用特性.原来打算花两天学习ES6的,结果花了3天才勉强过了一遍阮老师的ES6标准入门(水好深,ES6没学好ES7又来了...) ...

  5. 【shell 大系】Linux Shell常用技巧

    在最近的日常工作中由于经常会和Linux服务器打交道,如Oracle性能优化.我们数据采集服务器的资源利用率监控,以及Debug服务器代码并解决其效率和稳定性等问题.因此这段时间总结的有关Linux ...

  6. Linux系统重要快捷键& Shell 常用通配符

    [Tab]:使用Tab键来进行命令补全: [Ctrl+c]:强行终止当前程序: [Ctrl+d]:键盘输入结束或退出终端: [Ctrl+s]:暂定当前程序,暂停后按下任意键恢复运行: [Ctrl+z] ...

  7. shell 常用正则

    shell常用正则表达式   “^\d+$” //非负整数(正整数 + 0)   “^[0-9]*[1-9][0-9]*$” //正整数   “^((-\d+)|(0+))$” //非正整数(负整数 ...

  8. Hbase Shell常用命令

    hbase shell常用的操作命令有create,describe,disable,drop,list,scan,put,get,delete,deleteall,count,status等,通过h ...

  9. (转)Hbase shell 常用命令(1)

    Hbase shell 常用命令(1) link:http://blog.csdn.net/scutshuxue/article/details/6988348 下面我们看看HBase Shell的一 ...

随机推荐

  1. KMP算法简明法则

    KMP算法也算是相当经典,但是对于初学者来说确实有点绕,大学时候弄明白过后来几年不看又忘记了,然后再弄明白过了两年又忘记了,好在之前理解到了关键点,看了一遍马上又能理解上来.关于这个算法的详解网上文章 ...

  2. csps-s模拟测试62,63Graph,Permutation,Tree,Game题解

    题面:https://www.cnblogs.com/Juve/articles/11631298.html permutation: 参考:https://www.cnblogs.com/clno1 ...

  3. 0905NOIP模拟测试赛后总结

    40分rank33.连续爆炸祭. 这次爆炸和心态无关.主要是答题策略出了点问题.T2大众分20.暴搜打表非常强. 拿到题目看到前面人都看pdf,突然想跟风皮一把,就把刚下的doc也转成pdf了hhh ...

  4. 莫烦pytorch学习笔记(二)——variable

    .简介 torch.autograd.Variable是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现 Variable和tensor的区别和联系 Variable是篮子, ...

  5. 国内有哪些质量高的JAVA社区?

    国内有哪些质量高的JAVA社区? 转自:http://www.zhihu.com/question/29836842#answer-13737722 并发编程网 - ifeve.com 强烈推荐 Im ...

  6. iOS之CGcontext.h方法和属性简介

    /* CoreGraphics - CGContext.h Copyright (c) 2000-2012 Apple Inc. All rights reserved. */ #ifndef CGC ...

  7. logcat日志文件

    android日志系统提供了记录和查看系统调试信息的功能,日志都是从各个软件和一些系统的缓冲区中记录下来的,缓冲区可以通过logcat命令来进行查看和使用 开发者选项,有个选项叫做“日志记录器缓冲区大 ...

  8. 机器学习中常用的距离及其python实现

    1 概述 两个向量之间的距离(此时向量作为n维坐标系中的点)计算,在数学上称为向量的距离(Distance),也称为样本之间的相似性度量(Similarity Measurement).它反映为某类事 ...

  9. 记一次log4j日志文件小事故

    最近散仙在做公司的一个跟搜索有关的数据分析项目,主要就是统计搜索的转化率,目的主要有以下几个: (1)通过数据分析挖掘,找出搜索业务在整个平台系统里的GMV里所占份额 (2)给公司的搜索算法调优,提供 ...

  10. 如何在终端编译C++代码

    C++语言从编写-->执行整个过程.一般来讲,开发一个C++程序需要经过以下几步1. 编写代码,2. 编译器进行编译,compile    生成.o的可执行的二进制目标文件3. 连接器进行连接. ...