歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> Linux.Shell編程筆記-基礎

Linux.Shell編程筆記-基礎

日期:2017/3/1 13:36:59   编辑:SHELL編程

第二章 shell編程基礎

腳本傳遞參數

為什麼要向shell腳本傳遞參數?參數傳遞可以將外部的值傳遞到腳本的內部函數中,提高腳本的靈活性;參數傳遞可以添加腳本的適用選項,增加腳本的可定制性,以應付不同的情況。

$#代表參數的個數

$@代表參數的內容

如果你擁有的參數多於9個,則不能使用$l0來引用第l0個參數。首先,必須處理或保存第一個參數($1),然後使用shift命令刪除參數$1,並將所有剩余的參數下移一位,因此$10就變成了$9,以此類推。$#的值將被更新以反映參數的剩余數量。在實踐中,最常見的情況是將參教迭代到函數或shell腳本,或者迭代到命令,替換使用for語句創建的列表,因此這個約束基本不成問題。

實例腳本

[hcr@slave2 temp]$ cat ~/bin/ps.sh
#!/bin/sh
 
ps -ef |grep $@
[hcr@slave2temp]$ ps.sh firefox
hcr       2417 1784  0 17:00 pts/0    00:00:00 /bin/sh /home/hcr/bin/ps.shfirefox
hcr       2419 2417  0 17:00 pts/0    00:00:00 grep firefox
[hcr@slave2 temp]$
IO重定向
標准輸入、標准輸出與標准錯誤

程序讀取輸入(數據的來源)、運算後輸出(數據的目的端),以及報告異常和錯誤,這三者就是標准輸入(standard input )、標准輸出( standard output)和標准錯誤( standard error )。

許多unix的程序都遵循這個原則—從標准輸入讀入,經過處理,從標准輸出輸出。遵循這個原則的程序往往被稱為過濾器(filter)。過濾器加管道,這是unix的世界:並且,寬進嚴出的程序是受人稱贊的。

管道和重定向

從標准輸入讀入,從標准輸出輸出,將異常及錯誤報告到標准錯誤。這是遵循UNIX哲學的軟件正確行為。但是,我們總不能將所有的輸入和輸出都集中在黑乎乎的字符界而,我們還要讀寫文件、看視頻、聽音樂、還要打游戲,這些人機交互的輸入和輸出都來自不同的設備或文件。

因此,shell提供了數種語法和標記,用以改變默認輸入端和輸出端。

1. > 改變標准輸出、(會刪除文件b.txt內容)

[hcr@slave2 temp]$ echo 'abc' > b.txt

2. < 改變標准輸入

[hcr@slave2 temp]$ cat < b.txt > c.txt 

3. >>追加文件內容(不會刪除文件內容)

[hcr@slave2 temp]$ cat < b.txt >> c.txt 

4. | 建立管道

[hcr@slave2 temp]$ head -n10 /etc/passwd | grep bash 

5. 小實例

[hcr@slave2 temp]$ cat /etc/passwd | while read line ; doecho $line >> c.txt; done;

管道的數據共享在Linux內核中是通過內存拷貝實現的。相較於CPU的運算,數據的移動往拄更消耗時間。因此,在設計管道時,要盡量把能夠減少數據量的操作五於管道的前端。這樣一來數據拷貝快速。二來程序運算量減少. 例如,在sort之前,使用grep找出相關數據,可以減少許多sort的運算量

文件描述符

內核(kernel)利用文件描述符(filedescriptor)來訪問文件。文件描述符是非負整數。打開

現存文件或新建文件時,內核會返回一個文件描述符。讀寫文件也需要使用文件描述符來指定待讀寫的文件。

特殊文件的妙用

1./dev/null

/dev/nul就是一個黑洞。當一些文件不想輸出或者標准輸出或者錯誤輸出的時候可以把輸出指定到黑洞。

實例:

cat /etc/passwd | while read line ; do cat$line 2>/dev/null; done;

如果不加2>/dev/null;肯定會報一些

cat: root:x:0:0:root:/root:/bin/bash: 沒有那個文件或目錄

…..

之類的東西,如果不想看到這些信息就可以把這些錯誤信息放入到黑洞中。

1> 重定向標准輸出

2> 代表錯誤標准輸出

&> 代表標准輸出和錯誤標准輸出

2./dev/zero

/dev/zero的主要用途就是用來創建一個指定長度、並且初始化為空的文件,這種文件一般都用作臨時交換文件。

3./dev/tty

/dev/tty是一個很實用的文件。當程序打開這個文件時,UNIX/LINUX前所處的終端。輸出到此的信息只會顯示在當前工作的顯示器。在某些時候〔例如設定了腳本輸出到/dev/null)時,而你又想在當前終端顯示一些很重要的信息,就可以調用這個設備,寫入重要信息。這樣做可以強制信息顯示到終端。

#!/bin/sh

printf "Enter new PWD"
stty -echo
read pass < /dev/tty
printf "Enter new PWD agin"
read pass2 < /dev/tty
stty echo
if [ "$pass" -eq "$pass2" ] ; then
echo "right"
else
echo "wrong"
exit 1
fi
exit 0

基本文本檢索

grep命令檢索文本

詳細參考:

http://www.cnblogs.com/end/archive/2012/02/21/2360965.html

unix、linux 系統的設計和編程

一切皆文件

文件類型

http://www.cnblogs.com/acpp/archive/2009/12/05/1617547.html

unix編程基本原則

KISS 原則

Copyright © Linux教程網 All Rights Reserved