shell指令碼的一些用法總匯

來源:互聯網
上載者:User
文章目錄
  • 1.shell數組的使用
  • 2.awk數組的操作
  • 3.shell參數問題
  • 4.awk中如何輸出單引號
  • 5.awk、 shell字串串連的方法
1.shell數組的使用

賦值:all=(6 5 4 3 1 8  9 10)   #一對括弧表示是數組,數組元素用“空格”符號分割開。
取長度:num=${#a[*]}   #  ${#a[*或@]}  
取元素:member=${a[2]}     # 用${數組名[下標]} 下標是從0開始  下標是:*或者@ 得到整個數組內容
列印所有元素:echo  ${a[*]} #
刪除某個元素:unset  a[3] #刪除第四個元素
替換某個元素:a=(${a[*]/3/125}) #找到值為 3 的元素,並替換成 125
分區: echo ${a[@]:3:2} #列印從第四元素開始的兩個元素

2.awk數組的操作

<1>建立數組
array[index] = value :數組名array,下標index以及相應的值value。

<2>讀取數組值
{ for (item in array)  print array[item]} # 輸出的順序是隨機的

{for(i=1;i<=len;i++)  print array[i]} # Len 是數組的長度

<4>刪除數組或數組元素: 使用delete 函數
delete array                     #刪除整個數組

delete array[item]           # 刪除某個數組元素(item)
<5>多維陣列
???

3.shell參數問題

$#   參數的個數

$*  或$@  所有的參數

$1 $2: 代表第一個、二個參數(參數從1開始數的)

擷取最後一個參數:${!#}

嵌套擷取某個參數:

a="cd"

cd="hellofroma"

echo ${!a}  #會列印 “hellofroma”

4.awk中如何輸出單引號

最近在用awk拼字一段sql語句時,遇到了 單引號不能輸出的 問題 。
實在讓人很困惑 !
awk中如何輸出單引號 如何在awk中列印輸出單引號呢 shell如何處理單引號呢 ?
也就是shell中對單引號的處理問題

解決辦法
awk '{print " '\'' "}'
把轉義的單引號',用兩個單引號括起來,使其不執行

原因是 :括在雙引號中的三種特殊字元不被忽略:$,\,` ,即雙引號會解釋字串的特別意思,而單引號直接使用字串輸出.

那麼shell如何處理特殊字元的呢
1. 單引號 ( ' ' )
如果我們想尋找的是Susan Goldberg,不能直接使用grep Susan Goldberg phonebook命令,grep會把Goldberg和phonebook當作需要搜尋的檔案
howard@0[script]$ grep 'Susan Gold' phonebook
Susan Goldberg 403-212-4921
當shell碰到第一個單引號時,它忽略掉其後直到右引號的所有特殊字元
2. 雙引號 ( " " )
雙引號作用與單引號類似,區別在於它沒有那麼嚴格。單引號告訴shell忽略所有特殊字元,而雙引號只要求忽略大多數,具體說,括在雙引號中的三種特殊字元不被忽略:$,\,` ,即雙引號會解釋字串的特別意思,而單引號直接使用字串.如果使用雙引號將字串賦給變數並反饋它,實際上與直接反饋變數並無差別。如果要查詢包含空格的字串,經常會用到雙引號。
howard@0[script]$ x=*
howard@0[script]$ echo $x
hello.sh menus.sh misc.sh phonebook tshift.sh
howard@0[script]$ echo '$x'
$x
howard@0[script]$ echo "$x"
*
這個例子可以看出無引號、單引號和雙引號之間的區別。在最後一種情況中,雙引號告訴shell在引號內照樣進行變數名替換,所以shell把$x替換為*,因為雙引號中不做檔案名稱替換,所以就把*作為要顯示的值傳遞給echo。
對於第一種情況需要進一步說明,shell在給變數賦值時不進行檔案名稱替換(這從第三種情況中也能看出來),各步驟發生的精確次序如下:
shell掃描命令列,把x的值設為星號*;
shell再次掃描命令列,碰到星號*,把它替換成目前的目錄下的檔案清單;
shell啟動執行echo命令,把檔案清單作為參數傳遞給echo.
這個賦值的先後次序非常重要:shell先作變數替換,然後作檔案名稱替換,最後把這行處理為參數
3. 反引號(``)
命令替換是指shell能夠將一個命令的標準輸出插在一個命令列中任何位置。shell中有兩種方法作命令替換:把shell命令用反引號或者$(...)結構括起來,其中,$(...)格式受到POSIX標準支援,也利於嵌套。
howard@0[script]$ echo The date and time is `date`
The date and time is 三 6月 15 06:10:35 CST 2005
howard@0[script]$ echo Your current working directory is $(pwd)
Your current working directory is /home/howard/script.
4. 反斜線 backslash-escaped( \ )
反斜線一般用作逸出字元,或稱逃脫字元,linux如果echo要讓逸出字元發生作用,就要使用-e選項,且逸出字元要使用雙引號
echo -e "\n"
反斜線的另一種作用,就是當反斜線用於一行的最後一個字元時,shell把行尾的反斜線作為續行,這種結構在分幾行輸入長命令時經常使用。

轉接:http://www.cnblogs.com/rootq/articles/1417138.html

5.awk、 shell字串串連的方法

awk :

http://www.cnblogs.com/chengmo/archive/2010/10/09/1846639.html

shell:

http://www.cnblogs.com/wangkangluo1/archive/2012/06/13/2548636.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.