shell變量的淺談

變量本質上是存儲數據的一個或多個計算機內存地址,變量的命令規則包括:

1) 不能使用程序中的保留字,如if, for

2) 變量由字母、下劃線和數字組成,且不能以數字開頭

3) 要求風名知義

4) 統一命名規則:駝峰命名法

變量主要分為本地變量、環境變量、局部變量、位置變量和特殊變量

(1)本地變量:只對當前shell進程有效,對當前shell進程以外的其它進程,包括子進程無效

變量直接賦值格式:name=value

也可以引用變量:

a. 可以是直接字串:name=root

b. 變量引用:name=$USER

c. 命令引用:name=`COMMAND` , name=$(COMMAND)

使用變量:

shell變量的淺談 

注:變量名外面的花括號是可選的,加不加都行,加花括號是為了幫助解釋器識別變量的邊界

已定義的變量,可以被重新定義,如:

shell變量的淺談 

那么什么是只對當前進程有效呢?我們bash進入子shell發現echo $Myname沒有任何反應,退出子shell,又能輸出了

shell變量的淺談 

注,同樣的,假如我們再開一個進程,也會發現同樣找不到$Myname這個變量名

顯示所有已定義的變量:set

利用set可以查看所有的變量,包括環境變量

刪除變量:unset name

(2)環境變量:只對當前shell及其子進程有效

環境變量的聲明與賦值:

export name=VALUE

declare -x name=VALUE

如果你希望把你定義的變量讓其他所有的shell程序都能用,也就是定義新的環境變量。需要用到export關鍵詞,如:

shell變量的淺談 

環境變量的特性:聲明一個環境變量,在當前shell進程以及子shell進程中可用,父shell進程中不可用,這里的“可用”可以理解成父shell進程環境變量的一個復制,而不是繼承父類的環境變量兩者共用一份,因此子shell進程中對父shell進程的環境變量進行增、刪、改、查均無影響。

顯示所有環境變量:

env

printenv

export

declare -x

他們只顯示環境變量

bash 內建的環境變量包括:

PATH:命令搜索路徑。由冒號分隔,用于搜索命令

SHELL:當調用shell時,它掃描環境變量以尋找該名字。

USER:當前的用戶為誰

UID:展開為當前用戶的用戶ID,在shell啟動時初始化

HOME:家目錄

PWD:當前工作目錄

SHLVL:查看當前的shell為第幾階

LANG:查看當前默認的編碼格式

MAIL:查看mail的路徑

HOSTNAME:查看當前主機名

HISTSIZE:查看默認history緩存的歷史記錄條數

等等

刪除變量:unset name

(3)局部變量:生效范圍為當前shell進程中某代碼片段(通常指函數)

一般連續的字符串,數字,路徑等可以不加任何引號,不過無引號的情況最好用雙引號替代之。

如果變量中使用其他變量,則河以使用單引號否則無法使用,如下:

如果變量中有空格,就必須使用雙引號否則就無法輸出。

(4)位置變量:$1,$2…來表示,用于腳本在腳本代碼中調用通過命令行傳遞給它的參數

$1, $2…: 對應第一,第二等參數。獲取當前執行shell腳本的第n個參數值(參數值默認空格區分,如果參數加了雙引號,則將雙引號的整個作為一個參數,不管其中是否有空格。),n=1..9, n0時表示腳本的文件名,如果大于9,用括起來。

$0: 命令本身

$*: 傳遞給腳本的所有參數,全部參數合為一個字符串

$@: 傳遞給腳本的所有參數,每個參數為獨立的字符串

$#: 傳遞給腳本的參數的個數

set — 清空所有位置變量

$0:是用來取腳本本身的名字,就是你命令之后跟的那個名字,如:

shell變量的淺談 

$#: 獲取當前傳給腳本的所有參數的個數,一般用于控制參數個數。

shell變量的淺談 

$?: 命令執行的返回值,0表示沒有錯誤,其他表示有錯誤

shell變量的淺談 

實例:

1、編寫腳本/root/bin/argsnumsh,接受一個文件路徑作為參數;如果參數個數小于1,則提示用戶“至少應該給一個參數”,并立即退出;如果參數個數不小于1,則顯示第一個參數所指向的文件中的空白行數

 

2、編寫腳本/root/bin/hostping.h,接受一個主機的IPv4地址做為參數,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提示用戶“該IP地址不可訪問”

 

3、編寫腳本/root/bin/checkdisk.sh,檢查磁盤分區空間和inode使用率,如果超過80%,就發廣播警告空間將滿

答案:

1.

[   “$@”  ]&&(cat $1 |grep “^[[:space:]]*$” |wc -l) ||(echo 至少應該給一個文件參數!;exit)

2.

ping -c1 -w1 $1 &> /dev/null && echo “IP地址可以訪問!“||echo”IP地址不可訪問!

3.

diskused_max=`df | grep sd|sort -nr -k5|head -1|tr -s ‘ ‘ %|cut -d% -f5`

inodeused_max=`df -i| grep sd|sort -nr -k5|head -1|tr -s ‘ ‘ %|cut -d% -f5`

[ “$diskused_max” -gt “80” ] && wall “空間即將滿“||echo “空間使用率不超過80%”

[ “$inodeused_max” -gt “80” ] && wall “inode即將滿“||echo “inode使用率不超過80%”

unset diskused_max inodeused_max

 

 

 

 

原創文章,作者:xxcj,如若轉載,請注明出處:http://www.www58058.com/83877

(0)
xxcjxxcj
上一篇 2017-08-05
下一篇 2017-08-05

相關推薦

  • 我的學習宣言,不忘初心

    Dear 馬哥: 我相信選擇馬哥教育是正確的。 我將用洪荒之力的努力來成為一名合格的馬幫門徒! 一定不學中國足球。 敬禮 自學生 朱宏

    Linux干貨 2016-10-30
  • 計算機的組成及功能

    計算機的組成有中央處理器(包含邏輯運算器和控制器)、內存、輸入設備、輸出設備    邏輯運算器主要負責程序的運算和邏輯的判斷、控制器是協調各組件與各單元的工作。 內存是與CPU進行溝通的橋梁,其作用是用于暫時存放CPU中的運算數據,以及與硬盤等外部存儲器交換的數據。 輸入設備是用戶和計算機系統之間進行信息交換的主要裝置之一。 輸出設備是外…

    Linux干貨 2017-07-02
  • KeepAlived實現HAProxy雙主并實現資源的動靜分離

    KeepAlived實現HAProxy雙主并實現資源的動靜分離 前言 HAProxy介紹 實驗拓撲 實驗環境 實驗步驟 配置后端httpd服務器 配置HAProxy實現backend負載均衡 測試動靜分離效果 配置KeepAlived 測試KeepAlived 配置DNS DNS測試 最終測試 總結 前言 我們這次使用HAProxy作為負載均衡調度器來實現后…

    Linux干貨 2016-04-16
  • grep基本正則表達式以及擴展正則表達式

    基本正則表達式: grep:Globel serach REgular expression and print out the line 作用:文本搜索工具,根據用戶指定的“模式(過濾條件)”對目標文本逐行進行匹配檢查,打印匹配到的行 模式:由正則表達式的元字符及文本字符所編寫出的過濾條件 grep選項:       &nbs…

    Linux干貨 2016-08-08
  • 設計模式(九)外觀模式Facade(結構型)

    1. 概述      外觀模式,我們通過外觀的包裝,使應用程序只能看到外觀對象,而不會看到具體的細節對象,這樣無疑會降低應用程序的復雜度,并且提高了程序的可維護性。例子1:一個電源總開關可以控制四盞燈、一個風扇、一臺空調和一臺電視機的啟動和關閉。該電源總開關可以同時控制上述所有電器設備,電源總開關即為該系統的外觀模式設計。 2.…

    Linux干貨 2015-07-06
  • 交換分區管理

    創建交換分區 linux上的交換分區必須使用獨立的文件系統且文件系統的systemid必須為82mkswap [options] device [size] 創建交換分區文件系統 掛載交換分區     swapon 設備名稱 處理交換文件和分區     交換分區是系統RAM的補充  &nb…

    Linux干貨 2016-09-02
欧美性久久久久