shell程式設計學習筆記(1)

2021-06-23 00:54:35 字數 2569 閱讀 5109

最近突然不忙了,想系統的學習一下shell程式設計。可以說對linux的熟悉離不開對shell的學習,而作為乙個好的系統管理員,不能不懂shell程式設計。

shell程式設計不只是簡單的命令堆疊,它還提供了變數,控制結構(if/for/while);可以說它和python、perl、ruby等3大腳步語言一樣,但在一些本地的管理以及檔案操作上,能提供更多的靈活性。

最簡單的指令碼只需要乙個命令,直接從終端輸入的乙個命令可看出是最簡單的乙個指令碼,如:ls,who等,ls列舉對應目錄下的各檔案,who列舉系統有哪些人在登陸。

管道符『|』可以在兩個命令之間建立管道(pipeline):乙個命令的輸出,成為另一命令的輸入。如列舉某資料夾下資料夾加檔案的個數:

ls /  |wc -l

'ls /'命令的結果作為『wc -l』的輸入,wc(字數計算程式)可以計算行(line)、字數(word)、字元數(character),-l選項計算行數,從而計算出資料夾或檔案的個數。

通常乙個指令碼不止一兩個命令,它是一些命令的組合加一些控制結構等等,一般我們會將其寫入乙個文字檔案裡面,然後用chmod +x 賦予其可執行的許可權,預設情況下會呼叫/bin/sh(標準的shell)副本來執行該程式。現在,一般的linux系統都不止乙個直譯器,bash/csh/等。指定使用csh直譯器,可再其第一行加入:

#! /bin/csh -f

通常使用絕對路徑,避免找不到shell,下面則指定awk 直譯器:

#! /bin/awk -f

shell最基本的工作是執行一些系統命令,命令與引數的關係:命令+空白(space鍵或tab鍵)+引數。如:

ls -l

cd /home

選項引數並不是必須的:ls命令不加『-l'也可以執行,選項引數有兩種格式』-『或』--『

如ls -a等效於ls --all

可以使用分號(;)分隔同一行的多條命令:cd /home;mkdir emptydir

shell識別3種基本的命令:內建命令、shell函式、外部命令:

a.建立新的程序,即shell副本。

b.新程序在path變數內列出目錄中,尋找特定命令。如果命令名稱中有』/『符號,則略過路徑查詢。

c.新程序中,以找到的新程式取代shell程式並執行。

指令碼語言的變數使用都非常方便,下面是乙個變數的應用:

當變數賦值有空格時需要用「」將其括起來,使用$符號進行變數的引用。

echo:簡單的文字輸出使用echo即可,很方便,上面已經演示過它的使用了。複雜一點的列印可以用printf,它實現了c中printf函式類似的功能,如:

>:輸出重定向,如果檔案不存在,將新建乙個,如果已經存在,將其覆蓋

>>:附加到檔案,如果檔案不存在,將新建乙個,如果已經存在,附加到檔案尾部

下面的命令使用重定向備份bashrc檔案:

path=$path:.
'.'表示本目錄,'..'表示上一目錄。若要讓上述設定永久有效,可將上述設定加入~/.bashrc檔案尾。

shell命令和引數直接用空白隔開,並且會依次存入$0、$1、$2等shell自動變數中,在指令碼中可用$0/$1等訪問相關引數。

方式1:sh -x 指令碼;被跟蹤的指令碼前會有乙個+號,此時指令碼內所有命令將被跟蹤,能快速定位出錯的程式段,其結果如下:

方式2:在指令碼中使用set -x和set +x來開啟跟蹤和關閉跟蹤,這通常在大的指令碼中跟蹤某一段程式。將上述**改為:

#! /bin/sh

set -x

echo the shell script is $0

set +x

echo $1 this is your $2

結果為:

set +x命令也被跟蹤到,因為跟蹤是在它執行完後才關閉,set -x不被跟蹤,set -x執行完後才會開啟跟蹤。

shell程式設計筆記(1)

bash變數的型別 本地變數 區域性變數 環境變數 位置變數 1,2,shift 踢掉引數 特殊變數 引數的個數 引數列表 引數列表 shift 一次踢掉多個 filetest.sh etc fstab etc inittab 1 etc fstab 2 etc inittab 練習 寫一指令碼 能...

大夏shell程式設計學習筆記(1)

linux標準檔案描述符 檔案描述符 縮寫描述 0stdin 標準輸入 1stdout 標準輸出 2stderr 標準錯誤 重定向錯誤 ls al test 2 test4 僅重定向錯誤 ls al test test4 所有輸出都傳送到同乙個位置,預設錯誤訊息優先於標準輸出 exec 3 關閉檔案...

shell程式設計學習筆記

c語言中文網 shell教程 學習這篇文章時,發現它在單引號和雙引號有什麼區別上寫的不夠準確,於是網上查詢資料 shell程式設計中單引號,雙引號,各種括號的區別 學習這篇部落格時,發現寫的還是不夠準確,繼續網上查詢資料 雙引號作用與單引號類似,區別在於它沒有那麼嚴格。單引號告訴shell忽略所有特...