国产宅男网站在线|亚洲A级性爱免费视频|亚洲中精品级在线|午夜福利AA毛

  • <dd id="gf5jf"><th id="gf5jf"></th></dd>

    <cite id="gf5jf"><label id="gf5jf"></label></cite>
  • <div id="gf5jf"><listing id="gf5jf"></listing></div>
    學習啦 > 學習電腦 > 操作系統(tǒng) > Linux教程 >

    shell中的各種括號的使用方法教程

    時間: 加城1195 分享

      Linux繼承了Unix以網絡為核心的設計思想,是一個性能穩(wěn)定的多用戶網絡操作系統(tǒng)。在shell中出現許多括號,那么分別有什么作用呢?怎么使用?這篇文章主要介紹了shell中的各種括號的使用方法,需要的朋友可以參考下

      具體介紹

      在這里我想說的是幾種shell里的小括號,大括號結構和有括號的變量,命令的用法,如下:

      1.${var}

      2.$(cmd)

      3.()和{}

      4.${var:-string},${var:+string},${var:=string},${var:?string}

      5.$((exp))

      6.$(var%pattern),$(var%%pattern),$(var#pattern),$(var##pattern)

      現在分述如下:

      1.Shell中變量的原形:${var}

      大家常見的變量形式都是$var,如

      $ var=test

      $ echo $var

      test

      但當你要顯示變量值加隨意的字符(我這里用AA)時,就會出錯,如下:

      $ echo $varAA

      $

      這時應該用變量的原形:${var},即是加一個大括號來限定變量名稱的范圍,如下

      $ echo ${var}AA

      testAA

      $

      以這個特性,我們可以很方便地寫一個批量改后綴名的程序,我把它命名為mymv,程序如下:

      #!/bin/bash

      tail=$1

      for filename in `ls`

      do

      mv $filename ${filename}.$tail

      done

      程序需要提供一個后綴名,如c,表示改為后綴為c的C程序文件,看下面的測試:

      $ ls

      a b c

      $ mymv c

      $ ls

      a.c b.c c.c

      $

      看樣子程序運行的很好,但這是不完善的程序,有2個要注意的問題:

      A,目錄下沒有子目錄,如果有一個目錄,假設為dir,則也會被改為dir.c,這顯然不是我們想要的,應該修正這個程序能識別目錄。

      B,沒有幫助對程序的參數進行處理,程序應該足夠友好,在用戶沒有給定后綴名時應能處理,像上面的將直接給文件加上了一個點(.),這顯然也不是我們想要的。

      因為我們的目的是說明${var},這樣已經足夠了,因此這里不會再對上面的程序進行修正。

      2.命令替換$(cmd)

      命令替換$(cmd)和符號`cmd`(注意這不是單引號,在美式鍵盤上,`是ESC下面的那個鍵)有相同之處

      $ ls

      a b c

      $ echo $(ls)

      a b c

      $ echo `ls`

      a b c

      我們來分析一下命令echo $(ls),以便理解所謂命令替換是什么意思:

      shell掃描一遍命令行,發(fā)現了$(cmd)結構,便將$(cmd)中的cmd執(zhí)行一次,得到其標準輸出,再將此輸出放到原來命令echo $(ls)中的$(ls)位置,即替換了$(ls),再執(zhí)行echo命令。

      如下:

      echo $(ls)被替換成了echo a b c

      這里要注意的是$(cmd)中的命令的錯誤輸出是不會被替換的,替換的只是標準輸出:

      $ var=$(cat d) ###文件d在當前目錄不存在

      cat: d: 沒有那個文件或目錄

      $ echo $var

      $ ###顯然var變量的值是空的

      3、一串的命令執(zhí)行()和{}

      ()和{}都是對一串的命令進行執(zhí)行,但有所區(qū)別:

      A,()只是對一串命令重新開一個子shell進行執(zhí)行

      B,{}對一串命令在當前shell執(zhí)行

      C,()和{}都是把一串的命令放在括號里面,并且命令之間用;號隔開

      D,()最后一個命令可以不用分號

      E,{}最后一個命令要用分號

      F,{}的第一個命令和左括號之間必須要有一個空格

      G,()里的各命令不必和括號有空格

      H,()和{}中括號里面的某個命令的重定向只影響該命令,但括號外的重定向則影響到括號里的所有命令

      我們來看幾個例子:

      $ var=test

      $ (var=notest; echo $var) ###變量var值為notest,此是在子shell中有效

      notest

      $ echo $var ###父shell中值仍為test

      test

      $ { var=notest; echo $var;} ###注意左括號和var之間要有一個空格

      notest

      $ echo $var ###父shell中的var變量的值變?yōu)榱薾otest

      notest

      $ { var1=test1;var2=test2;echo $var1>a;echo $var2;} ###輸出test1被重定向到文件a中,

      test2 ###而test2輸出則仍輸出到標準輸出中。

      $ cat a

      test1

      $ { var1=test1;var2=test2;echo $var1;echo $var2;}>a ###括號內命令的標準輸出全部被重定向到文件a中

      $ cat a

      test1

      test2

      下面是一個腳步例子:

      (

      echo "1"

      echo "2"

      ) | awk '{print NR,$0}'

      4,幾種特殊的替換結構:${var:-string},${var:+string},${var:=string},${var:?string}

      A,${var:-string}和${var:=string}

      若變量var為空,則用在命令行中用string來替換${var:-string},否則變量var不為空時,則用變量var的值來替換${var:-string}

      如:

      $ echo $newvar

      $ echo ${newvar:-a}

      a

      $ echo $newvar ###變量newvar的值仍然是空,但上一命令行中${newvar:-a}被替換成了a

      $ newvar=b

      $ echo ${newvar:-a} ###變量newvar的值不為空時,此命令行中的${newvar:-b}被替換為$newvar,即b

      b

      $

      對于${var:=string}的替換規(guī)則和${var:-string}是一樣的,所不同之處是${var:=string}若var為空時,用string替換${var:=string}的同時,把string賦給變量var:

      $ echo $newvar

      $ echo ${newvar:=a}

      a

      $ echo $newvar ###變量newvar被賦值為a,同時${newvar:=a}被替換成a

      a

      $ echo ${newvar:=b} ###變量newvar不為空(其值已被賦為a),則${newvar:=b}被替換為newvar的值(即b)

      a

      $ echo $newvar

      a

      ${var:=string}很常用的一種用法是,判斷某個變量是否賦值,沒有的話則給它賦上一個默認值。

      如設置默認的編輯器:

      PHP 代碼:

      echo You use editor: ${EDITOR:=/bin/vi}

      B,${var:+string}

      ${var:+string}的替換規(guī)則和上面的相反,即只有當var不是空的時候才替換成string,若var為空時則不替換或者說是替換成變量 var的值,即空值。(因為變量var此時為空,所以這兩種說法是等價的)

      $ echo $newvar

      a

      $ echo ${newvar:+b}

      b

      $ echo $newvar

      a

      $ newvar=

      $ echo ${newvar:+b}

      $

      C,${var:?string}

      替換規(guī)則為:若變量var不為空,則用變量var的值來替換${var:?string};若變量var為空,則把string輸出到標準錯誤中,并從腳本中退出。我們可利用此特性來檢查是否設置了變量的值。

      $ newvar=

      $ echo ${newvar:?沒有設置newvar的值}

      bash: newvar: 沒有設置newvar的值

      $ newvar=a

      $ echo ${newvar:?沒有設置newvar的值}

      a

      $

      補充擴展:在上面這五種替換結構中string不一定是常值的,可用另外一個變量的值或是一種命令的輸出。

      $ echo ${var:-`date`}

      日 3月 6 02:10:39 CST 2005

      $ echo ${var:-$(date)}

      日 3月 6 02:11:46 CST 2005

      $ a=test

      $ echo ${var:-$a}

      test

      $

      5.POSIX標準的擴展計算:$((exp))

      這種計算是符合C語言的運算符,也就是說只要符合C的運算符都可用在$((exp)),甚至是三目運算符。

      注意:這種擴展計算是整數型的計算,不支持浮點型.若是邏輯判斷,表達式exp為真則為1,假則為0。

      $ echo $((3+2))

      5

      $ echo $((3>2))

      1

      $ echo $((25<3 ? 2:3))

      3

      $ echo $var

      $ echo $((var=2+3))

      5

      $ echo $var

      5

      $ echo $((var++))

      5

      $ echo $var

      6

      $

      好了,上面的例子足夠了,這也表明了這種擴展運算是很強大的。

      補充:Linux基本命令

      1.ls命令:

      格式::ls [選項] [目錄或文件]

      功能:對于目錄,列出該目錄下的所有子目錄與文件;對于文件,列出文件名以及其他信息。

      常用選項:

      -a :列出目錄下的所有文件,包括以 . 開頭的隱含文件。

      -d :將目錄像文件一樣顯示,而不是顯示其他文件。

      -i :輸出文件的i節(jié)點的索引信息。

      -k :以k字節(jié)的形式表示文件的大小。

      -l :列出文件的詳細信息。

      -n :用數字的UID,GID代替名稱。

      -F : 在每個文件名后面附上一個字符以說明該文件的類型,“*”表示可執(zhí)行的普通文 件;“/”表示目錄;“@”表示符號鏈接;“l”表示FIFOS;“=”表示套接字。

      2.cd命令

      格式:cd [目錄名稱]

      常用選項:

      cd .. 返回上一級目錄。

      cd ../.. 將當前目錄向上移動兩級。

      cd - 返回最近訪問目錄。

      3.pwd命令

      格式: pwd

      功能:顯示出當前工作目錄的絕對路徑。

      相關閱讀:Linux主要特性

      完全兼容POSIX1.0標準

      這使得可以在Linux下通過相應的模擬器運行常見的DOS、Windows的程序。這為用戶從Windows轉到Linux奠定了基礎。許多用戶在考慮使用Linux時,就想到以前在Windows下常見的程序是否能正常運行,這一點就消除了他們的疑慮。

      多用戶、多任務

      Linux支持多用戶,各個用戶對于自己的文件設備有自己特殊的權利,保證了各用戶之間互不影響。多任務則是現在電腦最主要的一個特點,Linux可以使多個程序同時并獨立地運行。

      良好的界面

      Linux同時具有字符界面和圖形界面。在字符界面用戶可以通過鍵盤輸入相應的指令來進行操作。它同時也提供了類似Windows圖形界面的X-Window系統(tǒng),用戶可以使用鼠標對其進行操作。在X-Window環(huán)境中就和在Windows中相似,可以說是一個Linux版的Windows。

      支持多種平臺

      Linux可以運行在多種硬件平臺上,如具有x86、680x0、SPARC、Alpha等處理器的平臺。此外Linux還是一種嵌入式操作系統(tǒng),可以運行在掌上電腦、機頂盒或游戲機上。2001年1月份發(fā)布的Linux 2.4版內核已經能夠完全支持Intel 64位芯片架構。同時Linux也支持多處理器技術。多個處理器同時工作,使系統(tǒng)性能大大提高。


    Linux shell中的各種括號的使用方法相關文章:

    1.linux shell腳本執(zhí)行命令

    2.linux shell暫停命令

    3.linux shell cd命令

    4.Linux Shell中的特殊符號和含義是什么

    5.linux shell wait命令

    4019401