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 16:32
下一篇 2017-08-05 16:55

相關推薦

  • week4

    一,復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其他用戶均沒 有任何訪問權限; cp -r /etc/skel/ /home/tuser1 chmod -R go= /home/tuser1/ 二,編輯/etc/group文件,添加組hado…

    Linux干貨 2016-11-18
  • Linux-系統啟動的基本過程 以及相關破環修復實驗。

    這章簡單描述下系統的啟動流程,主要以破環修復實驗為主: 系統啟動基本過程:       Linux系統啟動過程大致按照如下步驟進行(這是一個簡述):        第一階段:BIOS啟動引導階段;       …

    2017-07-10
  • 配置yum服務器——以centOS 6.9系統為例

    準備工作 關閉防火墻  關閉防火墻service iptables stop  設置防火墻開機不啟動chkconfig iptables off  查看一下防火墻狀態 iptables -vnL 如下圖,可以看到已經關閉 關閉SElinux 使用命令 vim /etc/selinux/config 將SELINUX=enable…

    Linux干貨 2017-08-05
  • 馬哥教育網絡版25期+第一周作業

    1、描述計算機的組成及其功能 計算機是由CPU,控制器,RAM,輸入設備,輸出設備組成的 2、按系列羅列Linux的發行版,并描述不同發行版之間的聯系與區別 現如今主流的LINUX發行版系列主要有: Debian,Slackware,Redhat,這些發行版都是基于GUNLinux開發的,不過是由不同的組織或團體開發并發行的。 3、描述Linux的哲學思想,…

    Linux干貨 2016-12-05
  • PHP中引用的詳解(引用計數、寫時拷貝)

    《PHP5中文手冊》內容中"引用的解釋"一文的摘要: 1. PHP中引用的特性 PHP中引用意味著用不同的名字訪問同一個變量內容,引用不是C的指針(C語言中的指針里面存儲的是變量的內容,在內存中存放的地址),是變量的另外一個別名或者映射。注意在 PHP 中,變量名和變量內容是不一樣的,因此同樣的內容可以有不同的名字。最接近的比喻是 Uni…

    Linux干貨 2015-04-10
  • 馬哥教育網絡班第25期-第1周作業

    一、計算機的組成及其功能 計算機由硬件與軟件組成 硬件     1、運算器                           &…

    Linux干貨 2016-12-05
欧美性久久久久