【Linux】shell編程之給變量賦值的五種方法

1.  Shell中的變量類型windows

Shell中的變量能夠分爲環境變量、位置變量、預約義的特殊變量以及用戶自定義變量、數組

<!--[if !supportLists]-->2.  <!--[endif]-->環境變量bash

Shell中的環境變量是一類Shell預約義變量,是用於設置系統運行環境的變量,環境變量由系通通一命名。部分系統變量的值由系統設定,部分環境變量的值能夠由用戶給定。ide

環境變量的名稱由大寫字母組成,經常使用的Shell環境變量以下所示:this

 

HOME: 用戶主目錄的全路徑名,cd $HOME 便可切換到用戶的主目錄idea

PATH: 相似於windows下的路徑,Shell會在裏面依次尋找二進制的可執行文件。spa

       echo $PATH能夠顯示當前的PATH,添加新的PATH方法 $PATH=$PATH:新PATH命令行

TERM:  終端類型 echo $TERMorm

PS1:   提示符,root用戶默認爲#,普通用戶默認爲$進程

SHELL: Shell解釋器的絕對路徑

LOGNAME: 登陸用戶的用戶名

UID:  當前用戶的UID    echo $UID

<!--[if !supportLists]-->3.  <!--[endif]-->位置變量

位置變量是根據出如今命令行上的參數的位置肯定的變量,在調用Shell程序的命令行中,參數的位置定義以下所示。

   $命令  參數1   參數2  參數3

其中  $0  對應  執行的命令名

      $1  對應  參數1

      $2  對應  參數2

      $3  對應  參數3

必定要搞清楚順序!!

<!--[if !supportLists]-->4.  <!--[endif]-->預約義的特殊變量

預約義的特殊變量有着特殊的含義,用戶不能夠更改,全部的預約義變量都由「$」符號和另一個符號組成,經常使用的預約義特殊變量以下所示

$#: 位置參數個數(不包括Shell腳本名)

$*:  位置參數組成的字符串

$!:   上一個後臺命令對應的進程號

$?:   上一個命令的退出狀態,爲十進制數字,若是返回爲0,則表明執行成功。

$$:   當前的進程號PID

<!--[if !supportLists]-->5.  <!--[endif]-->用戶自定義變量 (大小寫敏感

要求: 變量名由字母或者下劃線開頭,後面跟任意數量的字母、數字、下劃線。

合法的:

     _name    SIZE    my_idea

非法的:

     2god      !name   hello&world

<!--[if !supportLists]-->6.  <!--[endif]-->變量的建立

有兩個內置的命令declare 和 typeset 可用於建立變量。經過命令的選項設置還能夠設定變量的建立方。

除了使用內置命令來建立和設置變量外,還能夠直接賦值,格式爲:

變量名=變量值

   注意:變量名前面不該加美圓「$」符號。(和PHP不一樣)

         等號「=」先後不能夠有空格。

         和C語言不一樣,Shell中不須要顯式的語法來聲明變量。

         變量名不能夠直接和其餘字符相連,若是想相連,必須用括號:echo 「this is $(he)llo!」

<!--[if !supportLists]-->7.  <!--[endif]-->變量的刪除

系統提供unset命令能夠刪除變量,例如

  unset  name

<!--[if !supportLists]-->8.  <!--[endif]-->變量的賦值

變量的賦值有五種:使用read命令,直接賦值,使用命令行參數,使用命令行的輸出結果,從文件讀取。

先說一下從read命令吧:(主要是在須要交互時使用

Read命令是系統內置命令,語法格式爲:

read  變量1   變量2

當Shell腳本執行到read命令時,將暫停腳本的執行並等待鍵盤的輸入,當用戶輸入完畢而且敲下回車以後,將完成賦值操做,腳本繼續執行。

Read指令的規則:

<!--[if !supportLists]-->l  <!--[endif]-->多個數據或變量之間用空格隔開

<!--[if !supportLists]-->l  <!--[endif]-->若變量個數與數據個數相等時,對應取值

<!--[if !supportLists]-->l  <!--[endif]-->若變量個數大於數據個數時,沒有輸入數據的變量取空值

<!--[if !supportLists]-->l  <!--[endif]-->若變量個數小於數據個數時,將多餘的數據賦給最後一個變量(也就是把空格當成字符串處理)

例子:

#!/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

do

chmod a+x $LINE

done<execfile

這個腳本使用了while..do..done 結構,最後一行表示從文件execfile讀取數據。while read LINE表示 每次循環讀入一行數據並賦值給變量LINE。

<!--[if !supportLists]-->9.  <!--[endif]-->變量的輸出

最簡單的方法就是使用echo

若是想輸出格式化的字符串,就須要使用printf,用法和C語言相似

            printf 命令的格式說明符

\」    輸出雙引號

\\    輸出反斜槓

\a    響鈴

\n    換行

\r     回車

相關文章
相關標籤/搜索