您的位置:首页 > 运维架构 > Shell

shell的基础知识(1)

2013-01-02 00:00 357 查看
在学习shell的脚本编程之前,得先了解一些shell的基本特征和语法,不管是什么平台的,本节都适合于sh大家庭的所有主流shell。

1.11编辑命令

如果喜欢emacs,那么编辑命令历史的时候所有的emacs基本命令都可以用得上。用<Control-E>到尾行,用<Control-A>到命令开头,用〈Control-P〉一条条回退到最近执行过的命令,重新把他们调出来进行编辑。用增量搜索命令历史找出老命令。

如果喜欢vi,那么用下面的命令就可以让shell的命令行编辑进入vi模式:

$set -o vi

和在vi里一样,编辑操作时又模式的,一开始进入输入模式,按键离开输入模式,按"i"键重新进入输入模式。在编辑模式下,“w”键向前进一个单词,“fX”在本行里找到下一个X等等。同时按下
Esc 和k键可以遍历过去输入的命令。

1.12管道和重定向

每个进程都至少有三个信道
“标准输入(0)”“标准输出(1)”“标准出错(2)”。内核给每个进程都设置了这3个信道,所以进程本身不必知道这3个信道到哪里,也许可能连接到一个终端窗口,一条网络连接,或者其他。

shell将,< > 和
>>解释成指令,用来把一条命令的输入或者输出重新定向到一个文件。< 这个符号把这条命令的标准输入和已有的某个文件的内容联系起来,符号
>和>>则重新定向到标准输出;>会替代文件的现有内容而>>则给文件追加内容。 可以看看下面的命令:

$echo "this is a test
message.">>/tmp/mymessage

在/tmp/mymessage
这个文件夹里存入一行内容,如果必要还会创建这个文件。也可以把创建的内容用电子邮件发给用户xiaoshen

$mail -s "Mail test"xiaoshen

为了把标准标准输出和标准错误都重新定向到同一个地方,可以用>&
这个符号。仅仅重定向标准错误的话则用>2就可以了。但是通常我们会把标准输入和标准错误分开处理,因为有些时候以非特权用户运行的时候就会在不同信道输出,可以看看下面例子:

$find /-name core

这条命令通常会导致出现“permission
denied”的出错消息,从而把真正的结果淹没在混乱的输出里了,而要解决这个问题通常可以用这个命令: $find /-name core 2>
/dev/null 也可以用这个命令:

$find /-name core >/tmp/corefile 2>dev/null 这个命令把路径发到
/tmp/corefile这个文件,把错误消息放弃,向终端窗口什么都不发。

要把一条命令的标准输出连接到另一条命令的标准输入上,可以用 |
这个符号,这个就是传说中的管道。可以通过一些命令来理解管道给我们带来的便利:

$ps -ef | grep httpd

$cut -d:-f7</etc/password|sort -u

第一条命令运行ps
由管道送给grep命令选出包含httpd这个词的罗干行,grep没有输出重定向,所以结果直接在终端窗口出现。第二条命令用cut命令从/etc/password
文件里没每个用户的shell路径选出来接着列出的路径通过sotr -u进行处理,产生的结果中不但一次排序而且路径只出现一次。知道管道的好处了吧?

补充下 && 和||的区别

如$lpr /tmp/t2 && rm /tmp/t2
这个命令是只有第一条命令执行成功后才执行$$后面的那个命令.而||符号则相反只有第一条命令执行不成功即返回一个非0的推出码时才执行后面的命令。

突然发现原来写总结不是那么容易的虽然觉得简单但是还是觉得写的挺费劲的,希望自己能够通过每天写总结点点滴滴积累提高自己。如果写的不好或有错误还望大家指出错误。2013.1.1点晚。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: