Shell 常用特性
管道 (|): 将一个命令的输出作为另外一个命令的输入。
也可以连同标准错误输出一起送入管道:
command1| &command2[|& command3...]
grep "hello" file.txt | wc -l
在file.txt中搜索包含有”hello”的行并计算其行数。 在这里grep命令的输出作为wc命令的输入。当然您可以使用多个命令。
- 标准输入(standard input,文件描述指针为0)
- 标准输出(standard output,文件描述指针为1)
- 标准错误输出(standard error,文件描述指针为2)
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
产生一个前台的进程,下一个命令须等该命令运行结束后才能输入。
产生一个后台的进程,此进程在后台运行的同时,可以输入其他的命令。
3 文件名代换(Globbing)
* 、?、 [] 这些用于匹配的字符称为通配符(Wildcard),具体如下:
表 - 通配符
* | 匹配0个或多个任意字符 |
? | 匹配一个任意字符 |
[若干字符] | 匹配方括号中任意一个字符的一次出现 |
[^若干字符] | 匹配任意一个字符的一次出现除了方括号中列出的 |
$ ls /dev/ttyS*
$ ls ch0?.doc
$ ls ch0[-].doc
$ ls ch[][-].doc
注意,Globbing所匹配的文件名是由Shell展开的,也就是说在参数还没传给程序之前已经展开了,比如上述ls ch0[012].doc
命令,如果当前目录下有ch00.doc
和ch02.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 命令
功能说明:声明 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 命令是用于命令行计算器。 它类似基本的计算器。 使用这个计算器可以做基本的数学运算。
语法:
语法是
bc [命令开关]
-c | 仅通过编译。 bc命令的输出被发送到标准输出。 |
-l | 定义数学函数并且初始化值为20,取代默认值0。 |
filename | 文件名,它包含用于计算的计算器命令,这不是必须的命令。 |
- 数字(整数和浮点)
- 变量
- 注释
- 表达式
- 编程语句
- 函数
bc 1.06
上述命令是来做数学运算。
[root@localhost ~]# bc -l
bc 1.06
Copyright 1991-1994,1997,1998,2000 Free Software Foundation,Inc.
上述命令是求'1+2'的和。
[root@localhost ~]# bc calc.txt
bc 1.06
Copyright 1991-1994,1997,1998,2000 Free Software Foundation,Inc.
'calc.txt' 这个文件有代码:1+2。 从文件输入并且显示输出结果。
在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 常用特性的更多相关文章
- hbase基本概念和hbase shell常用命令用法
1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实 ...
- 【转载】HBase基本概念和hbase shell常用命令用法
1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实 ...
- 探索ASP.NET MVC5系列之~~~4.模型篇---包含模型常用特性和过度提交防御
其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...
- ES6的一些常用特性
由于公司的前端业务全部基于ES6开发,于是给自己开个小灶补补ES6的一些常用特性.原来打算花两天学习ES6的,结果花了3天才勉强过了一遍阮老师的ES6标准入门(水好深,ES6没学好ES7又来了...) ...
- 【shell 大系】Linux Shell常用技巧
在最近的日常工作中由于经常会和Linux服务器打交道,如Oracle性能优化.我们数据采集服务器的资源利用率监控,以及Debug服务器代码并解决其效率和稳定性等问题.因此这段时间总结的有关Linux ...
- Linux系统重要快捷键& Shell 常用通配符
[Tab]:使用Tab键来进行命令补全: [Ctrl+c]:强行终止当前程序: [Ctrl+d]:键盘输入结束或退出终端: [Ctrl+s]:暂定当前程序,暂停后按下任意键恢复运行: [Ctrl+z] ...
- shell 常用正则
shell常用正则表达式 “^\d+$” //非负整数(正整数 + 0) “^[0-9]*[1-9][0-9]*$” //正整数 “^((-\d+)|(0+))$” //非正整数(负整数 ...
- Hbase Shell常用命令
hbase shell常用的操作命令有create,describe,disable,drop,list,scan,put,get,delete,deleteall,count,status等,通过h ...
- (转)Hbase shell 常用命令(1)
Hbase shell 常用命令(1) link:http://blog.csdn.net/scutshuxue/article/details/6988348 下面我们看看HBase Shell的一 ...
随机推荐
- Swimming Balls
Swimming Balls https://vjudge.net/contest/318752#problem/J如果直接算,各种球的情况都不清楚,因为放一个球之后,水位的变化也会影响之前放入的球, ...
- [JZOJ4648] 【NOIP2016提高A组模拟7.17】锦标赛
题目 描述 题目大意 有nnn个人,你要确定一个出场序列.每次新上台的人就会和擂主打一架,胜利的人继续当擂主.题目给出两两之间打架胜利(失败)的概率. 问111选手坚持到最后的最大概率. 思考历程 看 ...
- day 41 前端之前端初识
前端之前端初识 前端初识 本节目录 一 web标准 二 浏览器介绍 三 开发工具介绍 四 HTML介绍 五 HTML颜色介绍 六 规范 七 HTML结构详解 一 web标准 web准备介绍: 1. ...
- PAT甲级——A1066 Root of AVL Tree
An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...
- <scrapy爬虫>爬取校花信息及图片
1.创建scrapy项目 dos窗口输入: scrapy startproject xiaohuar cd xiaohuar 2.编写item.py文件(相当于编写模板,需要爬取的数据在这里定义) # ...
- pandas一些基本操作(DataFram和Series)_2
import numpy as nparr1 = np.arange(32).reshape(8,4)print(arr1)arr1 = arr1.reshape(-1);print(arr1)arr ...
- 2019-8-31-C#-已知点和向量,求距离的点
title author date CreateTime categories C# 已知点和向量,求距离的点 lindexi 2019-08-31 16:55:58 +0800 2018-05-08 ...
- nosql BASE
- Hadoop构架概览
hadoop是一个开源的软件框架,是一个利用商业硬件处理和存储大型数据的软件.从下到上主要有五个主要的组成部分: 集群,是一套主机(节点)组成的.节点可以以机架划分.这个是硬件级别的构架. YARN构 ...
- Leetcode953. Verifying an Alien Dictionary验证外星语词典
某种外星语也使用英文小写字母,但可能顺序 order 不同.字母表的顺序(order)是一些小写字母的排列. 给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的单词在 ...