~$mkdirhierproject/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}
2.变动路径;不要挪动存档
另外一个不良的利用形式是将.tar存档文件挪动到某个目次,由于该目次刚好是您但愿在个中提取.tar文件的目次。实在您基本不必要如许做。您能够为所欲为地将任何.tar存档文件解紧缩就任何目次――这就是-C选项的用处。在解紧缩某个存档文件时,利用-C选项来指定要在个中解紧缩该文件的目次:
清单4.好习气2的示例:利用选项-C来解紧缩.tar存档文件
~$tarxvf-Ctmp/a/b/cnewarc.tar.gz
相对将存档文件挪动到您但愿在个中解紧缩它的地位,切换到该目次,然后才解紧缩它,养成利用-C的习气则加倍可取――当存档文件位于其他某个地位时特别云云。
3.将下令与把持操纵符组合利用
您大概已晓得,在年夜多半Shell中,您能够在单个下令行上经由过程在下令之间安排一个分号(;)来组合下令。该分号是Shell控制操纵符,固然它关于在单个下令行大将团圆的下令串连起来很有效,但它其实不合用于一切情形。比方,假定您利用分号来组合两个下令,个中第二个下令的准确实行完整依附于第一个下令的乐成完成。假如第一个下令未按您预期的那样加入,第二个下令仍旧会运转――了局会招致失利。相反,应当利用更得当的把持操纵符(本文将形貌个中的部分操纵符)。只需您的Shell撑持它们,就值得养成利用它们的习气。
3.1仅当另外一个下令前往零加入形态时才运转某个下令
利用&&把持操纵符来组合两个下令,以便仅当第一个下令前往零加入形态时才运转第二个下令。换句话说,假如第一个下令运转乐成,则第二个下令将运转。假如第一个下令失利,则第二个下令基本就不运转。比方:
清单5.好习气3的示例:将下令与把持操纵符组合利用
~$cdtmp/a/b/c&&tarxvf~/archive.tar
在此例中,存档的内容将提取到~/tmp/a/b/c目次中,除非该目次不存在。假如该目次不存在,则tar下令不会运转,因而不会提取任何内容。
3.2仅当另外一个下令前往非零加入形态时才运转某个下令
相似地,||把持操纵符分开两个下令,而且仅当第一个下令前往非零加入形态时才运转第二个下令。换句话说,假如第一个下令乐成,则第二个下令不会运转。假如第一个下令失利,则第二个下令才会运转。在测试某个给定目次是不是存在时,一般利用此操纵符,假如该目次不存在,则创立它:
清单6.好习气3的另外一个示例:将下令与把持操纵符组合利用
~$cdtmp/a/b/c||mkdir-ptmp/a/b/c
您还能够组合利用本部分中形貌的把持操纵符。每一个操纵符都影响最初的下令运转:
清单7.好习气3的组合示例:将下令与把持操纵符组合利用
~$cdtmp/a/b/c||mkdir-ptmp/a/b/c&&tarxvf-Ctmp/a/b/c~/archive.tar
4.审慎援用变量
一直要审慎利用Shell扩大和变量称号。一样平常最好将变量挪用包含在双引号中,除非您有不如许做的充足来由。相似地,假如您间接在字母数字文本前面利用变量称号,则还要确保将该变量称号包含在方括号([])中,以使其与四周的文本辨别开来。不然,Shell将把跟随文本注释为变量称号的一部分――而且极可能前往一个空值。清单8供应了变量的各类援用和非援用及其影响的示例。
清单8.好习气4的示例:援用(和非援用)变量
~$lstmp/
ab
~$VAR="tmp/*"
~$echo$VAR
tmp/atmp/b
~$echo"$VAR"
tmp/*
~$echo$VARa
~$echo"$VARa"
~$echo"${VAR}a"
tmp/*a
~$echo${VAR}a
tmp/a
~$
5.利用本义序列来办理较长的输出
您也许看到过利用反斜杠(/)来将较长的行持续到下一行的代码示例,而且您晓得年夜多半Shell都将您经由过程反斜杠连接的后续行上键进的内容视为单个长行。但是,您大概没有在下令行中像一般那样使用此功效。假如您的终端没法准确处置多行缭绕,大概您的下令行比一般小(比方在提醒符下有长路经的时分),反斜杠就出格有效。反斜杠关于懂得键进的长输出行的寄义也十分有效,如以下示例所示:
清单9.好习气5的示例:将反斜杠用于长输出
~$cdtmp/a/b/c||/
>mkdir-ptmp/a/b/c&&/
>tarxvf-Ctmp/a/b/c~/archive.tar
大概,也能够利用以下设置:
清单10.好习气5的替换示例:将反斜杠用于长输出
~$cdtmp/a/b/c/
>||/
>mkdir-ptmp/a/b/c/
>&&/
>tarxvf-Ctmp/a/b/c~/archive.tar
但是,当您将输出行分别到多行上时,Shell一直将其视为单个一连的行,由于它老是删除一切反斜杠和分外的空格。
注重:在年夜多半Shell中,当您按向上箭头键时,全部多行输出将重绘到单个长输出行上。
6.在列表中对下令分组
年夜多半Shell都具有在列表中对下令分组的***,以便您能将它们的算计输入向下传送到某个管道,大概将其任何部分或全体流重定向到不异的中央。您一样平常能够经由过程在某个Subshell中运转一个下令列表或经由过程在以后Shell中运转一个下令列表来完成此目标。
6.1在Subshell中运转下令列表
利用括号将下令列表包含在单个组中。如许做将在一个新的Subshell中运转下令,并同意您重定向或搜集整组下令的输入,如以下示例所示:
清单11.好习气6的示例:在Subshell中运转下令列表
~$(cdtmp/a/b/c/||mkdir-ptmp/a/b/c&&/
>VAR=$PWD;cd~;tarxvf-C$VARarchive.tar)/
>|mailxadmin-S"Archivecontents"
在此示例中,该存档的内容将提取到tmp/a/b/c/目次中,同时将分组下令的输入(包含所提取文件的列表)经由过程邮件发送到地点admin。
当您在下令列表中从头界说情况变量,而且您不但愿将那些界说使用于以后Shell时,利用Subshell更可取。
6.2在以后Shell中运转下令列表