仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 529|回复: 7
打印 上一主题 下一主题

[shell编程] 来一发shell 步伐布局

[复制链接]
老尸 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-14 20:21:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!
复杂指令

command[-option][parameter]

command能够是别号,函数名,内置下令,内部可实行步伐或剧本

shell把持布局复合语句

forname[inword];dolist;done
for((expr1;expr2;expr3));dolist;done

selectname[inword];dolist;done


iflist;thenlist;[eliflist;thenlist;]...[elselist;]fi



whilelist;dolist;done

untillist;dolist;done

[function]name(){list;}

casewordin[[(]pattern[|pattern]...)list;;]...esac



1.[]暗示可选项
2.;可使用<newline>行号取代,用来支解token(下令序列)


Ø上述切合语句中的:
if;then;elif;else;fi
forin;do;done
while;do;done
until;do;done
casein;esac
上述词前必需有;大概<newline>开首

三.CompoundCommands复合下令

compoundcommand(复合下令)是以下情形之一:

(list)

list序列将在一个子shell中实行。变量赋值和影响shell情况变量的内建下令在下令停止后不会复兴感化。前往值是序列的前往值。

{list;}

list序列将在以后shell情况中实行。序列必需以一个新行符或分号停止。这类做法也称为groupcommand(下令组)。前往值是序列的前往值。注重与元字符()分歧,{}reservedwords(保存字),必需呈现在可以辨认保存字的场所。因为它们不会发生断词(causeawordbreak),它们和序列之间必需用空格分隔。

((expression))

表达式expression将被求值。求值划定规矩鄙人面的算术求值(ARITHMETICEVALUATION)章节中形貌。假如表达式的值非零,前往值就是0;不然前往值是1。这类做法和let"expression"等价。

[[expression]]

前往0或1,取决于前提表达式expression求值的情形。表达式是由上面CONDITIONALEXPRESSIONS前提表达式章节中形貌的原语(primaries)构成。[[]]中的词不会举行词的拆分和路径的扩大处置;而tilde扩大,参数和变量扩大,算术扩大,下令交换,函数交换和援用的往除则都将举行。

当利用==!=操纵符时,操纵符右侧的字符串被以为是一个形式,依据上面PatternMatching(形式婚配)章节中的划定规矩举行婚配。假如婚配则前往值是0,不然前往1。形式的任何局部能够被援用,强迫使它作为一个字符串而被婚配。

-------------------------

if表达式特性:

表达式能够用以下操纵符分离起来。依据优先级的降序列出以下:

(expression)

前往表达式expression的值。括号能够用来提拔操纵符的优先级。

!expression

前往真,假如表达式expression前往假。

expression1&&expression2

前往真,假如表达式expression1expression2都前往真。

expression1||expression2前往真,假如表达式expression1大概expression2两者之一前往真。

&&(与)和||操纵符不会对表达式expression2求值,假如expression1能够决意全部前提表达式的前往值的话。

Lists序列

list(序列)是一个或多个管道,用操纵符;,&,&&,或||分开的序列,而且能够选择用;,&,或<newline>新行符停止.

这些序列操纵符中,&&||优先级不异,其次是;&,它们的优先级是不异的。

序列中能够有一个或多个新行符来分开下令,而不是利用分号分开。

假如一个下令是由把持操纵符&停止的,shell将在背景的子shell中实行这个下令。shell不会守候下令实行停止,前往形态老是0。以分号;分开的下令会被按次实行;shell会守候每一个下令顺次停止。前往形态是最初实行的下令的前往形态。

把持操纵符&&||分离代表AND和OR序列。一个AND序列的情势是

command1&&command2

command2只要在command1前往0时才被实行。

一个OR序列的情势是

command1||command2

command2只要在command1前往非0形态时才被实行。AND和OR序列的前往形态是序列中最初实行的下令的前往形态。

n出格注重ifexpression中的&&||和BashLists序列中的&&||寄义是纷歧样的


---------------------------------

n几个含混观点切实其实定

Ø!&&||可使用到表达式毗连顶用于if等前提判别

Ø-oCa用在[]表达式中,&&||既能够用于[[]]外部,也能够用于毗连两个[]

if[]&&[]或if[]||[]

---------------------------------------

if["$an"=Y-o"$an"=y]

=if["$an"=Y]||["$an"=y]

=if[["$an"=Y||"$an"=y]]

如上三个等价,以下三个等价

-------------------------------------

if["$an"=Y-a"$an"=y]

=if["$an"=Y]&&["$an"=y]

=if[["$an"=Y&&"$an"=y]]

实比方下:

if[!"${PEERNIS}"="no"];then

if!["test"=="test"];thenecho"ok";fi

if[!"test"=="test"];thenecho"ok";fi

if[-x/etc/rc.d/init.d/ypbind]&&[-r/var/run/ypbind.pid];then

serviceypbindrestart>/dev/null2>&1

fi

[root@localhost~]#if[!"test"=="tet"-a"hi"=="hi"];thenecho"ok";fi

ok

[root@localhost~]#if[!"test"=="test"-o"hi"=="hi"];thenecho"ok";fi

ok

[root@localhost~]#if[!"test"=="test"-a"hi"=="hi"];thenecho"ok";fi

[root@localhost~]#if[!"test"=="tes"-a"hi"=="hi"];thenecho"ok";fi

ok

[root@localhost~]#if[!"test"=="tes"]&&["hi"=="hi"];thenecho"ok";fi

ok

[root@localhost~]#if[!"test"=="test"]&&["hi"=="hi"];thenecho"ok";fi

[root@localhost~]#if[!"test"=="test"]||["hi"=="hi"];thenecho"ok";fi

ok

[root@localhost~]#if!["test"=="test"]&&["hi"=="hi"];thenecho"ok";fi

[root@localhost~]#if!["tst"=="test"]&&["hi"=="hi"];thenecho"ok";fi

ok

[root@localhost~]#if[["tst"=="test"&&"hi"=="hi"]];thenecho"ok";fi

[root@localhost~]#if[["test"=="test"&&"hi"=="hi"]];thenecho"ok";fi

ok

[root@localhost~]#if[["est"=="test"||"hi"=="hi"]];thenecho"ok";fi

ok

Øif语句的换种写法:

if[condition];thencomand;fi=[condition]&&comd

if[!condition];thencomand;fi=![condition]&&comd


Øif前提中的重定向,制止尺度输入发生

if/sbin/lvmvgscan>/dev/null2>&1;then

action$"SettingupLogicalVolumeManagement:"/sbin/lvmvgchange-ay

fi

[root@localhost~]#ifls;thenecho"ok";fi

his.txtls.pdfmy.pcapset.shtcp.dumptcpdump.pdftcpdump.txttmpt.pcapt.sh

ok

[root@localhost~]#ifls>/dev/null2>&1;thenecho"ok";fi

ok


Ø可用于支解下令序列token分开符以下:
controloperator
Atokenthatperformsacontrolfunction.Itisoneofthefollowingsymbols:
||&&&;;;()||&<newline>
同理一个完全的指令,不管是切合语句语句,仍是可实行步伐或剧本,内置下令必需以行首开首大概由下面的controloperator支解
欢迎大家来到仓酷云论坛!
分手快乐 该用户已被删除
沙发
发表于 2015-1-16 09:38:45 | 只看该作者

来一发shell 步伐布局

安装一个新的软件时先看README,再看INSTALL然后看FAQ,最后才动手安装,这样遇到问题就知道为什么。如果说明文档不看,结果出了问题再去论坛来找答案反而浪费时间。
板凳
发表于 2015-1-24 07:43:42 | 只看该作者
熟读Linux系统有关知识,如系统目录树,有关内容可购书阅读或搜索论坛。
透明 该用户已被删除
地板
发表于 2015-2-1 09:41:59 | 只看该作者
对Linux命令熟悉后,你可以开始搭建一个小的Linux网络,这是最好的实践方法。Linux是网络的代名词,Linux网络服务功能非常强大,不论是邮件服务器、Web服务器、DNS服务器等都非常完善。
老尸 该用户已被删除
5#
 楼主| 发表于 2015-2-7 05:44:25 | 只看该作者
Linux简单,占内存少,特别是对于程序开发人员来说很方便,如果说windows的成功在于其方便用户的窗口管理界面。
灵魂腐蚀 该用户已被删除
6#
发表于 2015-2-21 10:55:11 | 只看该作者
一定要学好命令,shell是命令语言,命令解释程序及程序设计语言的统称,shell也负责用户和操作系统之间的沟通。
因胸联盟 该用户已被删除
7#
发表于 2015-3-6 21:16:23 | 只看该作者
我学习Linux的心得体会 ,希望对大家的学习有所帮助,由于水平有限,本文难免有所欠缺,望请指正。
若相依 该用户已被删除
8#
发表于 2015-3-20 21:49:33 | 只看该作者
一定要养成在命令行下工作的习惯,要知道X-window只是运行在命令行模式下的一个应用程序。在命令行下学习虽然一开始进度较慢。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-12 17:59

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表