基本脚本

反引号:

``  反引号里面的内容是命令行,通过反引号用户可以将shell命令的输出赋给变量,比如:

test=`date +%y%m%d`

echo “The time is :” $test

重定向:

输出重定向:

就是将shell命令的输出结果发送到一个文件里面

格式:command >  file

如果目标文件里面已经有内容了,那么会将原有的内容清除并添加新内容,如果不想改动原来文件的内容,就将“>”换成”>>”,表示追加

输入重定向:

和输出重定向相反,它是把文件的内容重定向给命令进行操作

格式:command  <   file

比如有一个文件test,我们要在终端中将里面的内容排序之后输出在终端上

sort  <  test

”<<”称为内联输入重定向,这种方法允许你在命令行而不是在文件指定输入重定向的数据,其实也就是将前面输入重定向的file换成了你在终端输入的数据

当用户在最后输入了EOF,那么就会终止操作

格式:

command  <<  marker

data

marker

wc  <<  EOF

>test  string  1

>EOF

这样就会输出test文本中行数、词数(第一行)、字节数(第一行)

为了更好理解重定向,先了解一下标准文件描述符

文件描述符 缩写 描述
0 STDIN 标准输入
1 STDOUT 标准输出
2 STDERR 标准错误

在使用输入重定向”<”的时候,Linux会用重定向指定的文件来替换标准输入文件描述符,它会读取文件并提取数据,就好像是用户在键盘输入数据一样

比如,我们cat  的时候,它会接收STDIN的输入,当用户每行输入一段数据,数据会马上输出在终端。当我们输入cat  <  file的时候,就是把file中的每行数据作为输入,然后cat出来.

实际上1>就等同于>

重定向错误和数据

利用1>符号将命令本该输出到STDOUT的正常输出重定向到该符号后面加的文件,利用2>可以将本该输出到STDERR的错误信息重定向到该符号后的文件,两个符号可以同时使用

cat  test  2>  test1  1>  test2

当使用&>符号的时候,命令生成的所有输出都会发送到同一位置,包括了错误和数据。&表示等同于,2>&1就是表示2的输出重定向等同于1标准输出

file  2>1:如果没有file这个文件就把错误输出到文件1中

2>&1  >file:错误输出到终端,标准输出被重定向到文件file中。&和1结合可以分析为标准输出,然后加上前面的>2就是代表错误重定向到标准输出

>file  2>&1:标准输出被重定向到文件file,然后错误输出也重定向到和标准输出一样,也是输出到文件file中,其实这样的效果就像&>那样。那么为什么不直接用>file  2>file呢,这是因为这样操作之后标准输出和标准错误输入到文件file之后会形成相互覆盖的结果。而且,这样的操作相当于开了两个互相竞争使用文件file的管道,如果按照前面那样操作就只开一个管道,但是已经包含了标准输出和标准错误,有更高的效率

>file  2>&1  &:和前面不加&的效果类似,最后一个&是为了命令在后台中运行

>/dev/null  2>&1:等同于1>/dev/null  2>/dev/null,默认情况下是1(标准输出)。这里的含义就是:标准输出重定向到/dev/null,而标准错误又被重定向到标准输出,因此标准输出和标准错误都重定向到/dev/null,其实就等同于&>  /dev/null。/dev/null实际上是一个黑洞文件,任何内容输入到这里都会被销毁

2>&1  >/dev/null:标准错误输出到终端,而标准输出不输出在终端

思考一下前面为什么有的要将2>&1放在后面

command  file  2>&1是标准错误拷贝了标准输出的行为,也就是同样重定向到file中,最后的结果就是将标准输出和标准错误都重定向到file中

command  2>&1  >file也是标准错误拷贝了标准输出的行为,但是由于前面没有加文件,此时的标准输出还是在终端,当使用了>file之后才重定向到file,但是标准错误还是在终端输出

总结一下:当2>&1出现在file前面,那么就是将标准错误输出到终端而标准输出输出到file,当2>&1出现在file后,那么就是将标准输出和标准错误都输出到file

管道符

使用管道符,可以将管道符前一个命令的结果作为输入传递给管道符后的命令

脚本退出

$?专属变量用来保存上个执行的shell命令的退出状态

成功执行之后返回0,失败返回127(没找到命令)。其他一些状态码:

状态码 描述
1 通用未知错误
2 错误使用shell命令
126 命令不可执行
128 无效的退出参数
128+x Linux信号x的严重错误
130 命令是通过ctrl+c退出
255 退出状态码越界

当在exit命令的结尾加入参数,输出$?的时候就是前面这个参数

运算

shell运算相关的命令有expr

比如expr  1+2

但是有时候就要转义,比如expr  1*3会报错,要用expr  1\*3

所以为了避免这些麻烦,用户可以使用方括号将运算表达式包含起来,比如

$var=$[1+2]

echo  $var

$var2=$[$var*3]

echo $var2

前面的运算都是基于整型的,浮点运算的解决要引入bc命令

输入bc的时候会弹出一些欢迎信息,如果要取消,输入bc  -q。退出bc要输入quit

demo:

echo $(val=`echo “scale=3;3.3/4”  | bc`

Technorati Tags: shell

参考:http://blog.csdn.net/ithomer/article/details/9288353

shell学习1---基本的shell命令的更多相关文章

  1. Shell学习(二)Shell变量

    一.Shell变量 变量的定义 例子: my_job="Learn Shell" PS:变量名和等号之间不能有空格!!! 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头 ...

  2. Shell学习(四)——shell中各种括号的作用

    参考博客: [1]shell中各种括号的作用().(()).[].[[]].{} [2]shell中的单层大/中/小括号.双层大中小括号.命令替换等 一.前言 目录 单括号() 双括号(( )) 单中 ...

  3. Shell学习笔记:<<EOF子命令

    在shell编程中,“EOF”通常与“<<”结合使用,“<<EOF”表示后续的输入作为子命令或子shell的输入,直到遇到“EOF”,再次返回到主调用shell,可将其理解为分 ...

  4. Shell学习(五)Shell输出命令

    一.echo命令 #1.直接显示字符串 echo "It is a test" #输出:It is a test #2.显示转义字符 echo "\"It is ...

  5. Shell学习(五)—— awk命令详解

    一.awk简介   awk是一个非常好用的数据处理工具,相对于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个[字段]处理,因此,awk相当适合处理小型的数据数据处理.awk是一种报 ...

  6. shell学习笔记3-后台执行命令

    cron 系统调度进程,使用它在每天的某时间或一周.一月的不同时间运行 at 使用它在一个特点的时间允许一些特殊的作业 & 使用它在后台允许一个占用时间不长的进程 Nohup 使用它在后台运行 ...

  7. Shell学习(八)——dd命令

    一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: 1. ...

  8. shell学习:几道常见shell习题

    1. 编写shell脚本,计算1-100的和: #! /bin/bash sum=0 for i in `seq 1 100`; do sum=$[$i+$sum] done echo $sum 计算 ...

  9. shell学习笔记2---执行Shell脚本(多种方法)

    在新进程中运行 Shell 脚本 1) 将 Shell 脚本作为程序运行 切换到脚本所在位置(还要给脚本加上可执行权限) [mozhiyan@localhost demo]$ ./test.sh #执 ...

随机推荐

  1. quartusII13.0使用教程

    1.新建工程项目,填写项目存储路径和工程名,不要出现中文路径 2.添加已存在文件(可选),在[File name]下选择已经存在的工程项目,利用[Add]或[Add all]命令添加文件到新工程,点击 ...

  2. 300道随机四则运算小程序(java编写)

    这是由Java编写的300道随机四则运算小程序, 运算数范围为0~100(不包括100),运算结果保留两位小数. 程序代码: import java.util.*; class Yunsuan{ pu ...

  3. Linux下管道重定向使用以及Shell编程(操作系统)

    实验名称:Linux的基本操作 实验目的: 1.了解管道和重定向 2.熟悉基本的Linux脚本的编写 实验环境:Ubuntu 12.4(32位,简体中文) 实验内容: 1.将当前用户目录下的文件清单输 ...

  4. 12_Java面向对象_第12天(构造方法、this、super)_讲义

    今日内容介绍 1.构造方法 2.this关键字 3.super关键字 4.综合案例 01构造方法引入 A:构造方法的引入 在开发中经常需要在创建对象的同时明确对象的属性值, 比如员工入职公司就要明确他 ...

  5. iOS- 本地文本容错搜索引擎2-->如何实现英文(英文首字母,汉语拼音)对中文的搜索?

      1.前言 先闲说几句,最近北京的雾霾真是大,呛的我这攻城师都抗不住了.各位攻城师们一定要爱护好自己的身体!空气好时,少坐多动. 如果条件好的话,最好让你们BOSS搞个室内空气净化器.因为那几天一般 ...

  6. Scrum 项目7.0——第一个Sprint的演示和回顾

    MY—HR 成员: 角色分配 学号 博客园 团队贡献分 丘惠敏 PM项目经理 201406114203 http://www.cnblogs.com/qiuhuimin/ 21 郭明茵 用户 2014 ...

  7. windows多线程(十) 生产者与消费者问题

    一.概述 生产者消费者问题是一个著名的线程同步问题,该问题描述如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个具有多个缓冲区的缓冲池 ...

  8. Jquery 表单提交后3s禁用

    <form action="${pageContext.servletContext.contextPath}/XXX/###" method="post" ...

  9. Rotate Array II

    Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array  ...

  10. Convolutional Neural Networks卷积神经网络(二)

    转自http://blog.csdn.net/zouxy09/article/details/8781543 CNNs是第一个真正成功训练多层网络结构的学习算法.它利用空间关系减少需要学习的参数数目以 ...