FreeBSD Shell的高级功能(转)

FreeBSD Shell的高级功能(转)[@more@]由于 shell是Unix下用户最经常使用的界面,因此熟练掌握必然带来更高的工作效率。事实上,仍然有很多种技巧,能帮助用户更方便的使用shell。


1) 命令行使用技巧

一个重要的增强功能是 shell提供的命令行编辑功能,这包括能够使用上次执行过的指令(命令回溯),对已经输入的部分进行编辑等等。

注意: shell的这些增强功能是在最新版本(4.2之后)的系统中才加以添加的,因此不再需要额外安装tcsh或bash。新版的FreeBSD使用tcsh作为基本的csh,而sh的功能也得到了增强。如果是老版本的系统,则需要安装tcsh作为shell,或者安装bash,来获得这些增强功能。

然而,最新的 sh缺省情况下并没有打开这个功能,因此必须首先打开这个功能,当打开这个功能之后,就能使用方向键来回溯执行过的命令,并进行修改。

$ set -o emacs

$ set -o vi

按照习惯的不同,可以选择 vi风格的编辑方式或emacs风格的方式,而vi风格还能支持vi的键盘指令,即在按下Esc键之后,使用h、j、k、l四个键来移动光标和回溯命令,它的好处是不使用基本键盘之外的控制键,因而可以适用于任何终端设备,并且进行编辑时手不需离开基本键盘,熟练操作之后最为快捷。

最新版本的 csh,即tcsh,缺省就支持命令回溯,但也能使用不同的命令切换编辑风格:

% bind emacs

% bind vi

另一个重要的功能是可以为常用的命令设置别名,简化用户输入,例如:

$ alias ec= “ echo This is a alias ”

$ ec

This is a alias

csh用于方便用户操作的另一项能力是自动补全命令或文件名的功能,因为FreeBSD下的文件名可能很长,将它们全部输入比较麻烦。事实上可以输入部分名字,然后按Tab键(在vi风格下是连续两次按Esc键),shell将自动补全文件名的剩余部分。如果已经输入的这部分名字不能确定具体的命令或文件,那么shell只将能确定的部分补上,然后响铃通知使用者继续输入以明确具体的文件。

事实上即使在基本的 sh或csh下,也可以使用 “ * ” 等特殊字符,用模式匹配的方式来简化输入。

$ cd /usr/loca*

$ pwd

/usr/local

Unix中的多数程序都具备模式匹配的处理能力,而shell的模式匹配功能最为常用。shell可以使用这些特殊模式来配置多个文件,达到简化操作的目的。如果要熟练掌握Unix,必须掌握模式匹配。

2) 控制功能

Unix的shell不仅仅简单的接受输入指令并执行,它更强大的能力是能够根据条件解释执行输入指令。当然,sh和csh对于输入的解释语法有所不同,由于在系统中sh最为基本,以下以sh为例,简单介绍shell的控制功能。

最重要的功能之一是根据条件来判断是否需要完成某项工作。最简单的情况下,如果某个程序存在并可以执行,则执行执行这个程序,这种用法在启动脚本中十分常见。这需要使用逻辑“与”判断:

$ [ -x /usr/bin/echo ] && /usr/bin/echo “ the program echo is running! ”

the program echo is running!

与此相反的方式是,当条件不成立的时候执行程序,这需要逻辑“或”判断:

$ [ -f /tmp/somefiles ] || echo “ somefiles is missing! ”

somefiles is missing!

当然,无论哪一种逻辑判断形式,关键点是逻辑判断本身的语法。一般来讲,可以根据文件本身的属性进行判断,如上面例子中判断文件 ” -f ” 是否存在, ” -x ” 判断文件是否是执行程序,还可以判断是否为目录 ” -d ” ,等等。此外,还可以根据字符串来进行判断,判断两个字符串是否相同、甚至比较大小,以及进行数学判断等等,下面将在介绍其他控制方式时给出一些例子。

更详细的判断条件,可以 man test。事实上,判断语句中的括号[本身就是一个程序,就是test,这个程序根据后面的条件返回一定的结果。因此,完全可以直接根据一个程序的返回结果进行判断。
使用逻辑与和逻辑或进行逻辑判断,是逻辑判断的一种缩略形式,它的好处是能将几个命令放在一行中。更为标准的方法当然还是使用 if判断语句。

$ if [ -d /home/user ] ; then echo “ user directory is exist! ” fi

user directory is exist!

此时由于有控制部分,将所有语句都写在一行上显然不是好主意, sh允许将这样一个语句分开完成的机制。

$ if [ ! -d /home/user1 ]

> then

> echo “ user1 directory is not exist! ”

> fi

注意, ” > “ 为 shell的提示符号而不是语句本身,当语句还没有完成的时候,sh使用提示符 ” > “ ,而不是标准的 ” $ ” ,这个提示符是由环境变量 PS2决定的。这个语句中增加了逻辑非的判断。

除了根据文件的属性进行判断之后,更多的情况下需要判断字符串是否相同:
QUOTE:

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8494135/viewspace-962799/,如需转载,请注明出处,否则将追究法律责任。

user_pic_default.png
请登录后发表评论 登录
全部评论
<%=items[i].createtime%>

<%=items[i].content%>

<%if(items[i].items.items.length) { %>
<%for(var j=0;j
<%=items[i].items.items[j].createtime%> 回复

<%=items[i].items.items[j].username%>   回复   <%=items[i].items.items[j].tousername%><%=items[i].items.items[j].content%>

<%}%> <%if(items[i].items.total > 5) { %>
还有<%=items[i].items.total-5%>条评论 ) data-count=1 data-flag=true>点击查看
<%}%>
<%}%> <%}%>

转载于:http://blog.itpub.net/8494135/viewspace-962799/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值