Bourne Shell程式設計雜記

2021-07-12 01:19:17 字數 1923 閱讀 6054

首先強調一下,bourne shell資料型別的概念極簡單:一切變數的值,都是字串。所以,也可以認為,bourne shell只有一種基本資料型別,那就是字串。

由於資料型別太簡單,所以指令碼中若要進行各種數**算,只能借助其他程式(例如,expr程式)來完成。其他程式計算出的結果,在指令碼中仍然儲存為乙個字串。

唯一例外的是陣列,他是一組字串的集合。

指令碼第一行固定為如下內容

#!/bin/sh

他表示這是乙個直譯器檔案,由程式/bin/sh來解釋執行。當然,若實際環境中sh程式不在這個路徑,則調整一下即可。

好了,下面開始進入正文。

0. 變數賦值及引用

給變數賦值

var_name=expression

例如: 

a=1a=hello

a="hello   world!" #值為多個單詞時,需要用引號括一下

引用變數的值

$  或者  $var_name

1. 命令列引數

以如下命令行為例

***.sh  a b c

$0  表示命令行中最左邊的這部分,即用相對路徑或絕對路徑表示的指令碼檔案的路徑。

實際執行時,這裡是什麼,就是什麼。他就是原原本本的shell指令碼的路徑。

$#  表示引數的個數,不包括$0本身。本例中,$#為3,即3個引數:a b c。

$1 $2 $3  ......表示具體的引數。這裡他們分別對應a b c

最後,對於函式的引數,$#與$1 $2 $3  ......,含義完全同上。

同時,對於函式來說,$0的值並不是函式名,而是與指令碼執行命令列引數中的$0一致。

2. 儲存命令執行的標準輸出到變數中

a=`/path/to/program  [params ...]`

注意,不管命令的輸出中是否包含分隔開的單詞,整個結果都做為乙個字串儲存到了變數中。

這個對於儲存函式執行的標準輸出也一樣適用。語法也一樣。

a=`function  [params ...]`

3. 陣列相關

注意,所有相關的值,還是和變數的值型別一樣,都是字串。

建立陣列 a=(1 2 3 4 5)

陣列元素個數 $  #值為5

引用元素  

$    #注意,陣列下標i從0開始

元素賦值  a[i]=100

引用整個陣列的內容  

$ 或者 $  #

值為1 2 3 4 5

最後注意一下,這裡陣列a的賦值比較規範。實際情況下,括號內的內容,可以是一組用分隔符(可以是空格,換行符)隔開的單詞(例如 ls 命令的執行結果)。

賦值後,每個單詞就是陣列的乙個元素,乾乾淨淨的,不包含分隔符本身。如果兩個單詞之間有多個分隔符,效果還是等於乙個分隔符。

4. 分支語法

(i)if語句

if [ expression ]; then

...elif [ expression ]; then

...else

...fi

(ii)for迴圈

item_list="1 2 3 4 5"  或者引用前面的陣列生成條目列表 item_list=$

for i in $;

doecho $i

done

5. sed引用shell變數

示例如下。唯一要注意的是,要使用雙引號,不能使用單引號。

sed "s/something/$/g"  a.txt

6. awk引用shell變數

示例如下。

echo  1 2 3 | awk ''

程式設計雜記2

1.編譯的時候輸出資訊 pragma message compiling threadmodel.h.2.作業系統版本不對輸出出錯資訊 ifndef windows error windows.h should be included first endif 3.interlockedincreme...

程式設計學習雜記

c語言,c 裡面全域性變數 包括陣列 編譯器自動賦初值為零.define mymax a,b a b?a b getline cin,b getline 就是遇到 n就停止,將 n前面的給讀入,同時捨棄 n but,cin讀字串的時候,會捨棄最前面的空白字元,同時遇到空白字元就停止,返回空白字元前面...

雜記 《C 程式語言》

1.類定義可以由於 include的使用而在不同原始檔裡重複出現,這樣並不違反唯一定義規則 2.class的const成員函式不能修改class 成員變數 3.對於const或者非const物件都可以呼叫const成員函式,而非const成員函式則只能對非const物件呼叫 p205 4.在類x的非...