04 Shell程式設計之二

2021-09-29 06:10:22 字數 4126 閱讀 7031

•環境變數:

shell

和指令碼使用變數儲存資料,某些特殊變數可以與其變數的內容一起傳遞到子程序,那麼這類特殊變數稱為是環境變數。

•檢視當前

shell

中定義的環境變數用

env命令

env•將變數宣告成環境變數:

export

abc=「some value」 或

abc=

「some value」

export abc

•環境變數將會影響當前宣告的

shell

及該shell

的所有子

shell。

shell定義的環境變數

shell

在開始執行時就已經定義了一些和系統的工作環境有關的變數,這些變數使用者還可以重新定義,常用的

shell

環境變數有:

home

:用於儲存註冊目錄的完全路徑名。

path

:用於儲存用冒號分隔的目錄路徑名,

shell

將按path

變數中給出的順序搜尋這些目錄,找到的第乙個與命令名稱一致的可執行檔案將被執行。

term

:終端的型別。

uid:當前使用者的識別符號,取值是由數字構成的字串。

pwd:當前工作目錄的絕對路徑名,該變數的取值隨

cd命令的使用而變化。

ps1:主提示符,在特權使用者下,預設的主提示符是「

#」,在普通使用者下,預設的主提示符是「$」。

ps2:在shell

接收使用者輸入命令的過程中,如果使用者在輸入行的末尾輸入「

\」然後回車,或者當使用者按回車鍵時

shell

判斷出使用者輸入的命令沒有結束時,顯示這個輔助提示符,提示使用者繼續輸入命令的其餘部分,預設的輔助提示符是「

>」。

預定義變數

預定義變數和環境變數相類似,也是在

shell

一開始時就定義了的變數,所不同的是,使用者只能根據

shell

的定義來使用這些變數,而不能重定義它。所有預定義變數都是由

$符和另乙個符號組成的,常用的

shell

預定義變數有: $#

:位置引數的數量 $*

:所有位置引數的內容 $?

:命令執行後返回的狀態 $$

:當前程序的程序號 $!

:後台執行的最後乙個程序號 $0

:當前執行的程序名

其中,「

$?」用於檢查上乙個命令執行是否正確(在

linux

中,命令退出狀態為

0表示該命令正確執行,任何非

0值表示命令出錯)。

「$$」變數最常見的用途是用作臨時檔案的名字以保證臨時檔案不會重複。

使用者定義的變數

使用者可以按照下面的語法規則定義自己的變數:

變數名=變數值

要注意的一點是,在定義變數時,變數名前不應加符號「

$」,在引用變數的內容時則應在變數名前加「

$」;在給變數賦值時,等號兩邊一定不能留空格,若變數中本身就包含了空格,則整個字串都要用雙引號括起來。

在編寫shell

程式時,為了使變數名和命令名相區別,建議所有的變數名都用大寫字母來表示。

有時我們想要在說明乙個變數並對它設定為乙個特定值後就不在改變它的值,這可以用下面的命令來保證乙個變數的唯讀性:

readly

變數名

在任何時候,建立的變數都只是當前

shell

的區域性變數,所以不能被

shell

執行的其他命令或

shell

程式所利用,

export

命令可以將一區域性變數提供給

shell

執行的其他命令使用,其格式為:

export

變數名

也可以在給變數賦值的同時使用

export

命令:

export

變數名=

變數值

使用export

說明的變數,在

shell

以後執行的所有命令或程式中都可以訪問到。

•設定使用者自定義命令:

echo $path cp

/hello.sh  /bin

hello.sh

•為使用者自定義命令設定別名: 通過

alias

,可以向系統定義自己的命令或者覆蓋現有系統的命令的使用,將使用者在檢查

path

的shell

之前解析和替換別名。

•  臨時定義別名:

alias hello=『hello.sh』

•  持久化定義別名:

vim  ~/.

bashrc

alias

lz=『ls -z』

•位置引數變數是預定義變數的一種,和環境變數類似,也是在

shell

一開始時就定義好的變數,所不同的是,使用者只能根據

shell

的定義來使用這些預定義變數,而不能重新定義。

•所有預定義變數都是由

$符和另乙個符號組成的。

$0 

指令碼名稱本身

$n 

指令碼的第

n個引數值

(n>9

時,用$

去指定) $

*指令碼的所有引數,所有引數被視為乙個單詞

$@ 

指令碼的所有引數,每個引數被視為乙個單詞

$# 

指令碼引數的個數

$$ 

該指令碼的程序的

pid

$? 

上乙個指令碼執行的返回值,為0或非

0

位置引數變數示例:

vim test.sh

#!/bin/bash

echo 「$0」

echo 「$3」

echo 「$*」

for var in「$@」;do

echo 「$var」

done

echo 「$#」

echo 「$$」

•在

shell

中變數類似於乙個容器,可以賦予不同的值,同時可以在指令碼執行期間輕鬆訪問和修改儲存的資料。

•為變數賦值:

變數名=變數值

•變數名稱通常是大寫字母,也可以由數字、字母(大寫和小寫)和下劃線字元

_組成。

•變數名稱不能以數字開頭,等號「

=」用於為變數賦值,不能用空格將其與變數名稱與值分開。

示例:

count=40

first_name=john

file1=/tmp/abc

_id=rh254

•給變數賦值時的常見資料型別:

變數中儲存的常見資料型別是整數型和字串型,為變數賦予字串值時,建議的做法是用引號括起來,這是因為如果未將字串值引在單引號或雙引號中,那麼

bash

會將空格字元解釋為單詞分隔符

,用單引號還是雙引號取決於期望

bash

對特殊字元如何處理。

• 示例:

full_name

=『john doe』

full_name

=「$first $last」

full_name

=『$first $last』

echo  「$

full_name

」輸出變數的值

•擴充套件變數值:

•通過在變數名稱前面加美元符號

$,可以通過變數擴充套件的過程來重新呼叫變數的值。

•如:可以使用

$variablename

來引用variablename

變數的值,其實

$variablename是$

的簡化版本,有時為了消除歧義需要使用花括號進行區分。

first_=aaron

first=white

last=ghost

echo $first_$last

echo $_$last

Linux學習筆記04 Shell基礎程式設計

文字檔案,通常以.sh結尾,存放linux命令的集合,能被shell解釋執行 組成 一段linux命令 shell命令 控制語句和注釋語句等。第一行 注釋行 開頭 變數 命名 以字母下劃線開頭,後面可以跟字母下劃線和數字,區分大小寫。等號左右不能有空格。分類 分為環境變數和本地變數。本地變數 只能在...

Linux基礎練習 04 shell

指令碼例 bin bash shell的強宣稱 never mind what it record here,cause it just a blank.注釋 echo e hello world shell內容 注意新建的指令碼需要賦權,儲存位置預設為bin bash且不推薦換地方。使用歷史 命令...

Shell語言 04 Shell分類以及直譯器

流行的shell有ash,bash,ksh,csh,zsh等,不同的shell都有自己的特點以及用途 c shell 使用的是類 c 語法,是具有c語言風格的一種shell,其內部命令有52個,較為龐大,目前使用的並不多,已經被 bin tcsh所取代 korn shell的語法與bourne sh...