進階shell指令碼編程之重新導向、環境變數、shell函數、echo命令用法

來源:互聯網
上載者:User

進階shell指令碼編程之重新導向、環境變數、shell函數


shell並不局限於簡單地逐行執行命令,更為強大的功能之一是能夠建立函數和函數庫。希望自訂命令列互動的方式或者自動化檔案處理任務。考慮用shell指令碼。

1、輸入和輸出重新導向

STDIN

STDOUT

STDERR

重新導向操作符

>        
-------把STDOUT重新導向到一個檔案

<        
-------把STDIN重新導向到一個檔案

>>     
-------把STDOUT添加到一個檔案的末尾

|        
-------從一個程式或者進程擷取輸出,然後發送給另一個程式或進程

<<delimiter    把當前的輸入資料流和STDIN關聯起來直到到達指定的分隔字元。

[root@localhost shell]# cat << END
> the cat
> sat on the
> Mat.
> END
the cat
sat on the
Mat.

[root@localhost shell]# cat << END
> the cat
> sat on the
> Mat.
> END
the cat
sat on the
Mat.

>操作符有幾個修飾標記,這些標記可以改變他的行為。

>&    STDOUT和STDERR同時進行重新導向。

>!     將迫使檔案以append模式建立,或者以normal模式覆蓋一個已經存在的檔案。

>@  將以二進位模式開啟一個檔案

2、命令替換:反引號和圓括弧擴充

#!/bin/sh
Lines=`wc -l filelist`
echo $Lines

[root@localhost shell]# ./p206
28 filelist


Lines=$(wc -l filelist)   //符號擴充

3、使用環境變數和shell變數

export命令用於修改shell變數,不帶選項會顯示很多環境變數。

export PATH=/bin

set命令可查看環境中已設定的shell變數

4、Shell函數

<1>、形式

name() {command;}

shell函數必須聲明之後才能使用。還可以有傳回值

#!/bin/sh
repeat(){
echo -en "I don't know $1 $2\n"
echo -en  "hello\n"

return 0

}
repeat Your Name

<2>、嵌套函數和遞迴

#!/bin/sh
number_one(){
echo "this is first one func speaking..."
number_two
}
number_two(){
echo "this is second func speaking...."
}
number_one

<3>、範圍

範圍包括全域域和局部域:使用local關鍵字標識局部變數

#!/bin/sh
scope(){
local soc=1
gblsoc=2
echo "local soc in func = $soc"
echo "global gblsoc in func = $gblsoc"
}
scope
echo "local soc outside func = $soc"
echo "gblsoc outside in func =$gblsoc"

exit 0


補充:echo命令用法:

echo命令的功能是在顯示器上顯示一段文字,一般起到一個提示的作用。

  該命令的一般格式為: echo [ -n ] 字串

  其中選項n表示輸出文字後不換行;字串能加引號,也能不加引號。用echo命令輸出加引號的字串時,將字串原樣輸出;用echo命令輸出不加引號的字串時,將字串中的各個單詞作為字串輸出,各字串之間用一個空格分割。

  功能說明:顯示文字。

  語   法:echo [-ne][字串]或 echo [--help][--version]

  補充說明:echo會將輸入的字串送往標準輸出。輸出的字串間以空白字元隔開, 並在最後加上換行號。

  參   數:-n 不要在最後自動換行

  -e 若字串中出現以下字元,則特別加以處理,而不會將它當成一般

  文字輸出:

  \a 發出警告聲;

  \b 刪除前一個字元;

  \c 最後不加上分行符號號;

  \f 換行但游標仍舊停留在原來的位置;

  \n 換行且游標移至行首;

  \r 游標移至行首,但不換行;

  \t 插入tab;

  \v 與\f相同;

  \\ 插入\字元;

  \nnn 插入nnn(八進位)所代表的ASCII字元;

  –help 顯示協助

  –version 顯示版本資訊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.