1. 程式人生 > >shell程式設計變數和變數賦值

shell程式設計變數和變數賦值

1、檢視所有的shell變數

set

2、檢視所有的只讀shell變數

readonly

3、變數設定值

格式:var_name=var_value

注意:=連線變數名和變數值,=兩側不能有空格;當值var_value含空格時,需要雙引號把var_value包起來

4、輸出變數值

echo $var_name

echo ${var_name}

5、變數值連線

echo $var_name1$var_name2

注意,兩個變數之間沒有空格

6、檢視所有環境變數

env

7、給環境變數設定值

VAR_NAME=VALUE

export VAR_NAME

8、清除變數

unset var_name

9、匯出變數到子指令碼中

父指令碼中定義好變數,然後 export var_name

子指令碼中可以使用該變數. $var_name或${var_name}

10、顯示指令碼執行狀態

執行完腳步,輸入 echo $?

注意:0,表示成功

11、指令碼執行的當前程序id

$$

12、傳遞給shell指令碼的引數個數

$#

13、反引號`

設定系統的命令輸出到變數

echo "shell file name is :`basename $0` "

14、以序列形式,列印當前整個目錄

echo *

15、替換運算子,

           1) ${var_name:-def_Val}    

                  如果變數var_name存在且為非null,返回該變數的值,否則返回預設值def-Val

                   注意var_name與:之間沒有空格,:與-之間可以有空格。主要用途,如果變數未定義,則用預設值.

            2) ${var_name:=val}   

                   如果變數var_name存在且為非null,返回該變數的值,否則,把val的值賦給變數var_name,並返回var_name的值val

                   注意var_name與:之間沒有空格,:與=之間也不能有空格。

            3)${var_name:?message},  

                 如果變數var_name存在且為非null,返回該變數的值,否則返回該變數的名字var_name:提示資訊meesage,並退出當前命令或指令碼

  注意var_name與:之間沒有空格,:與?之間也不能有空格。

             4) ${var_name:+val}   

                  如果變數var_name存在且為非null,返回val,否則返回null

                 注意var_name與:之間沒有空格,:與+之間也不能有空格。

15、返回變數長度

        ${#val_name}

16、顯示所有命令列引數

         $*  或 [email protected] 

$* 和 [email protected] 的細微差別
     從下面的例子中可以看出,如果是用冒號引起來,表示這個變數不用IFS替換!!所以可以看到這個變數的"原始值"。反之,如果不加引號,輸出時會根據IFS的值來分割後合併輸出! $* 是按照IFS中的第一個值來確定的!下面這兩個例子還有細微的差別!

[plain] view plaincopyprint?
  1. $ IFS=:;  
  2. $ set x y z  
  3. $ echo $*  
  4. x y z  
  5. $ echo "$*"  
  6. x:y:z  
  7. $ echo [email protected]  
  8. x y z  
  9. $ echo "[email protected]"  
  10. x y z  

 上例 set 變數其實是3個引數,而下面這個例子實質是2個引數,即 set "x y z"  和 set x y z 是完全不同的。

[plain] view plaincopyprint?
  1. $ set "x" "y z"  
  2. $ echo $*  
  3. x y z  
  4. $ echo "$*"  
  5. x:y z  
  6. $ echo [email protected]  
  7. x y z  
  8. $ echo "[email protected]"  
  9. x y z  
  10. $ echo $* |od -b  
  11. 0000000 170 040 171 040 172 012  
  12. 0000006  
  13. $ echo "$*" |od -b  
  14. 0000000 170 072 171 040 172 012  
  15. 0000006  

小結:$* 會根據 IFS 的不同來組合值,而 [email protected] 則會將值用" "來組合值!


17、算術運算操作  $(())     

       $((var1 opr var2)) 

只能是+-*/ 和()運算子,並且只能做整數運算

       例如:  $((5+1))

18、命令代換$()

類似於 反引號`

例如:echo $(date)

給變數賦值

 1.  Shell中的變數型別

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

環境變數

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

位置變數

位置變數是根據出現在命令列上的引數的位置確定的變數,在呼叫Shell程式的命令列中,引數的位置定義如下所示。

   $命令  引數1   引數2  引數3

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

      $1  對應  引數1

      $2  對應  引數2

      $3  對應  引數3

一定要搞清楚順序!!

預定義的特殊變數

預定義的特殊變數有著特殊的含義,使用者不可以更改,所有的預定義變數都由“$”符號和另外一個符號組成,常用的預定義特殊變數如下所示

$#: 位置引數個數(不包括Shell指令碼名)

$*:  位置引數組成的字串

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

$?:   上一個命令的退出狀態,為十進位制數字,如果返回為0,則代表執行成功。

$$:   當前的程序號PID

使用者自定義變數 (大小寫敏感

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

合法的:

     _name    SIZE    my_idea

非法的:

     2god      !name   hello&world

變數的建立

有兩個內建的命令declare 和 typeset 可用於建立變數。通過命令的選項設定還可以設定變數的建立方。

除了使用內建命令來建立和設定變數外,還可以直接賦值,格式為:

變數名=變數值

value1=$1

   注意:變數名前面不應加美元“$”符號。(和PHP不同)

         等號“=”前後不可以有空格。

         和C語言不同,Shell中不需要顯式的語法來宣告變數。

         變數名不可以直接和其他字元相連,如果想相連,必須用括號:echo “this is $(he)llo!”

變數的刪除

系統提供unset命令可以刪除變數,例如

  unset  name

變數的賦值

變數的賦值有五種:使用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

第三種賦值方法是使用命令列引數賦值。(這種賦值方法是引數需要經常變化,並且不需要互動時使用

value1=$1

這種賦值方法,也就是直接在命令後面跟引數,然後系統用$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。

變數的輸出

最簡單的方法就是使用echo

如果想輸出格式化的字串,就需要使用printf,用法和C語言類似

            printf 命令的格式說明符

\”    輸出雙引號

\\    輸出反斜槓

\a    響鈴

\n    換行

\r     回車


相關推薦

shell程式設計變數變數

1、檢視所有的shell變數 set 2、檢視所有的只讀shell變數 readonly 3、變數設定值 格式:var_name=var_value 注意:=連線變數名和變數值,=兩側不能有空格;當值var_value含空格時,需要雙引號把var_value

shell 指令碼中將輸出內容給一個變數時的換行問題(git tag命令內部有less命令)

shell 指令碼中將輸出內容賦值給一個變數時的換行問題(git tag命令內部有less命令) 參考網址 shell 指令碼中將輸出內容賦值給一個變數時的換行問題 注意git tag命令內部有less命令 示例 msg=`git tag` && echo "$m

php入門變數變數的間接引用、連線字串連線運算子

【1】變數的間接引用: <?php $a = 'b'; $$a = '123'; echo $b; ?> 上面的輸出結果是123 我們可以看到在第二行程式碼中多了一個$,並通過指定的名稱訪問變數,指定的名字儲存在$a('b')中,並把這個變數

【NOI OpenJudge】【1.2】程式設計基礎之變數定義、及轉換

01: 整型資料型別儲存空間大小 #include<cstdio> int main(){ int a; short b; printf("%d %d",sizeof(a),sizeof(b)); return 0; } 02: 浮點型資料型別儲存空間大小

shell指令碼專家指南筆記#6_測試變數設定預設

## # 本文為《shell指令碼專家指南》一書的學習筆記。 ## 6. 測試變數和設定預設值 6.1. 設定預設值     設定變數預設值的幾種形式,複雜程度遞減。     #     if [ -z "$var" ]; then

shell 變數的條件

${變數1:+- 變數2}; (1) 冒號後面是“-”的話,或者沒有(預設是“-”) 表示, 如果變數1的值為空, 就是使用變數2的 (2) 冒號後面是“+”的話, 表示變數不為空時, 使用變數2的值 這裡的變數2可以是常量, 或者$變數

Shell程式設計---source ./ sh 執行指令碼的區別 & 更新環境變數

執行shell指令碼一般有三種方式:sh,./ 和 source。 sh 和 ./ 功能差不多,./不能執行沒有執行許可權的指令碼,而sh可以;兩者都是繼承父shell在子shell環境中執行指令碼,執行完畢後不帶回父shell環境中。 source 或者

shell讀取一個檔案內容到變數並逐一

sys_info=$(cat /usr/local/sysconfig.txt) var=`echo   $sys_info   |   awk   -F ', '   '{print   $0} '

shell】Linux shell 直接間接

shell linux 變量 運維 什麽是直接賦值? 1.作者直接賦予參數值的方式稱為直接賦值。 2.一般來說,由交互的方式賦值為間接賦值。 例1: varl=arppinging.com 這種就是直接賦值,由編程作者直接賦予固定的值。 例2: [root@arppinging ~]# re

R語言-迴圈產生變數名並,應用到 ggolot2 迴圈作圖

問題的起源來自,想要批量出數十張組合好的圖。 實現過程中,最大的問題是如何實現:迴圈產生變數名,並對其將ggplot的一長段作圖程式碼傳送給該變數名。   最終使用assign函式解決了   首先產生1000個字串格式的備用變數名: p <- c(paste0('p

反射如何取得變數變數 從引數object中取

今天寫專案用到了pdf的生成需要從Object中取得傳的值填寫到pdf中 最後決定使用反射     新增測試類 public class User { private Integer id; private String name;

Python函式中的變數函式返回

1.函式的變數 區域性變數和全域性變數: Python中的任何變數都有特定的作用域 在函式中定義的變數一般只能在該函式內部使用,這些只能在程式的特定部分使用的變數我們稱之為區域性變數 在一個檔案頂部定義的變數可以供檔案中的任何函式呼叫,這些可以為整個程式所使用的變數稱為全域性變數。

JavaScript中 ES6變數的結構

變數的結構賦值使用者很多 1、交換變數的值 let x = 1; let y = 2; [x,y] = [y,x] 上面的程式碼交換變數x和變數y的值,這樣的寫法不僅簡潔,易讀,語義非常清晰 2、從函式返回多個值 函式只能返回一個值,如果要返回多個值,只能講他們放在陣列或者物件裡返回。瞭解 解構賦值 ,取值

go語言漸入佳境[3]-變數宣告與

變數 變數是記憶體當中一段空間的抽象描述。變數的型別明確了空間的大小以及空間如何解析。 Go中的變數型別 1 bool byte complex64 complex128 error float32 float64 int int8 int16 int32 int64

nodejs中的變數解構

所謂的解構賦值,就是把 某個物件中的屬性,當作變數,給解放出來,這樣,今後就能夠當作變數直接使用了 可以使用 : 為解構出來的變數重新命名 const person = { name: 'zs', age: 22, gender:

Tensorflow: 動態的給變數tf.Variable【tf.assign】

Motivation 錯誤: tensorflow不能直接給Variable賦值,比如: embedding_var = tf.Variable(1) test_var = 10 embedding_var = test_var 或者: embedding_var = tf

變數解耦

本來一直用得好好的 let [x,y,z] = [1,2,3]; 直到看見了這玩意?? let obj = { h:[ 'hello',

go語言基礎之匿名變數多重

1、匿名變數 package main //必須有一個main包 import "fmt" func test() (a, b, c int) { return 1, 2, 3 } func main() { var c, d, e int c, d, e = test

ES6 變數宣告與傳遞、淺拷貝與深拷貝

ES6 變數宣告與賦值:值傳遞、淺拷貝與深拷貝詳解轉載於王下邀月熊_Chevalier的現代 JavaScript 開發:語法基礎與實踐技巧系列文章。 變數宣告與賦值 ES6 為我們引入了 let 與 const 兩種新的變數宣告關鍵字,同時也引入了塊作用域;本文

兩個結構體變數的相互

兩個結構體變數中包含的型別相同 func DeepFields(ifaceType reflect.Type) []reflect.StructField { var fields []reflect.StructField for i := 0; i