shell指令碼賦值的5種方法

來源:互聯網
上載者:User

1.  Shell中的變數類型

Shell中的變數可以分為環境變數、位置變數、預定義的特殊變數以及使用者自訂變數、

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

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

<!--[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     斷行符號

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.