1. shell中的變數型別
shell中的變數可以分為環境變數、位置變數、預定義的特殊變數以及使用者自定義變數。
2. 環境變數
shell中的環境變數是一類shell預定義變數,是用於設定系統執行環境的變數,環境變數由系統統一命名。部分系統變數的值由系統設定,部分環境變數的值可以由使用者給定。
環境變數的名稱由大寫字母組成,常用的shell環境變數如下所示:
home:使用者主目錄的全路徑名,cd $home 即可切換到使用者的主目錄
path:類似於windows下的路徑,shell會在裡面依次尋找二進位制的可執行檔案。
echo $path可以顯示當前的path,新增新的path方法 $path=$path:新path
term:終端型別 echo $term
ps1:提示符,root使用者預設為#,普通使用者預設為$
shell:shell直譯器的絕對路徑
logname:登入使用者的使用者名稱
uid:當前使用者的uid echo $uid
3. 位置變數
位置變數是根據出現在命令列上的引數的位置確定的變數,在呼叫shell程式的命令列中,引數的位置定義如下所示。
$命令 引數1 引數2 引數3
其中$0 對應 執行的命令名
$1 對應 引數1
$2 對應 引數2
$3 對應 引數3
(一定要搞清楚順序!!)
4. 預定義的特殊變數
預定義的特殊變數有著特殊的含義,使用者不可以更改,所有的預定義變數都由「$」符號和另外乙個符號組成,常用的預定義特殊變數如下所示
$#:位置引數個數(不包括shell指令碼名)
$*:位置引數組成的字串
$!:上乙個後台命令對應的程序號
$?:上乙個命令的退出狀態,為十進位制數字,如果返回為0,則代表執行成功。
$$:當前的程序號pid
5. 使用者自定義變數 (大小寫敏感)
要求: 變數名由字母或者下劃線開頭,後面跟任意數量的字母、數字、下劃線。
合法的:
_name size my_idea
非法的:
2god !name hello&world
6. 變數的建立
有兩個內建的命令declare 和 typeset 可用於建立變數。通過命令的選項設定還可以設定變數的建立方。
除了使用內建命令來建立和設定變數外,還可以直接賦值,格式為:
變數名=變數值
注意:變數名前面不應加美元「$」符號。(和php不同)
等號「=」前後不可以有空格。
和c語言不同,shell中不需要顯式的語法來宣告變數。
變數名不可以直接和其他字元相連,如果想相連,必須用括號:echo 「this is $(he)llo!」
7. 變數的刪除
系統提供unset命令可以刪除變數,例如
unset name
8. 變數的賦值
變數的賦值有五種:使用read命令,直接賦值,使用命令列引數,使用命令列的輸出結果,從檔案讀取。
先說一下從read命令吧:(主要是在需要互動時使用)
read命令是系統內建命令,語法格式為:
read 變數1 變數2
當shell指令碼執行到read命令時,將暫停指令碼的執行並等待鍵盤的輸入,當使用者輸入完畢並且敲下回車之後,將完成賦值操作,指令碼繼續執行。
read指令的規則:
多個資料或變數之間用空格隔開
若變數個數與資料個數相等時,對應取值
若變數個數大於資料個數時,沒有輸入資料的變數取空值
若變數個數小於資料個數時,將多餘的資料賦給最後乙個變數(也就是把空格當成字串處理)
例子:#!/bin/bash
echo –n 「 please enter your name」 //-n 表示使用者輸入和提示資訊在同一行
read name
echo 「your name is $name」
#!/bin/bash
echo 「please enter your first name and last name :」
read first last
echo 「your first name is $first」
echo 「your last name is $last」
第二種賦值方法就是直接給變數賦值(這種賦值方法主要是在不需要互動時,並且引數不需要修改時使用)
例如:name=xiaosu
gender=man
第三種賦值方法是使用命令列引數賦值。(這種賦值方法是引數需要經常變化,並且不需要互動時使用)
這種賦值方法,也就是直接在命令後面跟引數,然後系統用$1來引用第乙個引數。
第四種方法是利用命令的輸出結果賦值(這種賦值方法可以直接處理上個命令產生的資料)
在shell程式中,可以將乙個命令的輸出結果來當做變數,不過需要在賦值語句中使用反引號
例如currentdir=`pwd`
echo $currentdir
最後一種賦值方法是從檔案中讀入資料
這種方式就適合處理大批量的資料,直接把相應的資料寫入檔案,然後執行指令碼即可。
通常是通過while迴圈一行行讀入資料,即沒迴圈一次,就從檔案中讀取一行資料,直到讀取到檔案的結尾。
例如:#!/bin/bash
ls *.sh >execfile
while read line
dochmod a+x $line
done這個指令碼使用了while..do..done 結構,最後一行表示從檔案execfile讀取資料。while read line表示 每次迴圈讀入一行資料並賦值給變數line。
9. 變數的輸出
最簡單的方法就是使用echo
如果想輸出格式化的字串,就需要使用printf,用法和c語言類似
printf 命令的格式說明符
\」 輸出雙引號
\\ 輸出反斜槓
\a 響鈴
\n 換行
\r 回車
Linux shell 學習變數var篇(一)
varname value 變數名和等號之間不能有空格,這可能和你熟悉的所有程式語言不一樣 中間不能有空格,可以使用下劃線 不能使用標點符號 不能使用bash裡的關鍵字 可以使用help命令產看保留的關鍵字 使用readonly命令可以將變數定義為唯讀變數,唯讀的變數的值不能不改變 readonly...
Linux Shell變數使用
一 本地變數的使用 本地變數就如同區域性變數一樣,只在本shell中起作用。它不會影響到其他shell中的變數。1。顯示變數值 可以使用echo命令。需要注意的是,使用變數的時候必須在變數名前加上 符號 2。清除變數 使用unset命令可以清除命令。3。顯示所有本地shell變數 shell中預定義...
Linux shell 特殊變數
posix內建的shell變數 變數 意義 目前程序的引數個數 傳遞給當前程序的命令列引數。置於雙引號內,會展開為個別的引數。當前程序的命令列引數。置於雙引號內,則展開為一單獨引數 連字型大小 在引用時給予shell的選項 前一命令的退出狀態。shell程序的程序編號 process id 0 零 ...