1. 程式人生 > >變數在shell指令碼間的傳遞

變數在shell指令碼間的傳遞

前幾篇文章中已經介紹過區域性變數和環境變數的含義,接下來我們來拓展下,看看變數怎樣實現在shell指令碼
中的傳遞shell指令碼其實是用當前shell的子shell去執行的,所以在shell指令碼中定義的普通變數只適用於當前
shell的子shell環境,也就是說在當前shell環境中不適用,也不適用於這個shell指令碼的子shell。
在shell指令碼中定義的環境變數可以傳承給它的子shell,但是也不能傳遞給當前shell(不能逆向傳遞)
如果在一個指令碼中需要執行另一個指令碼,並且運用其中的變數,改如何申明變數呢,我們來看一個例子:
/root/test1.sh內容如下:
#!/bin/bash
aaa=yuanfaxiang
echo "test1:$aaa"

/root/test2.sh內容如下:
#!/bin/bash
/root/test1.sh
echo "test2:$aaa"
執行test2.sh結果如下:
[
[email protected]
~]# sh test2.sh test1:yuanfaxiang test2: 從結果可以看出test1.sh沒有把變數aaa的值傳遞給test2.sh 我們把test2.sh改成: #!/bin/bash source /root/test1.sh echo "test2:$aaa" 執行test2.sh結果如下: [[email protected] ~]# sh test2.sh test1:yuanfaxiang test2:yuanfaxiang 結果顯示test2.sh繼承了test1.sh中定義的變數aaa。 原因分析:在第一次執行test2.sh時,test1.sh被作為了test2.sh的子shell來執行,其中定義的變數只 在test1.sh中起效,不能逆向傳遞到test2.sh中;而在第二次執行中,採用source來執行test1.sh,意思 是直接把test1.sh在當前的test2.sh中執行,沒有作為子shell去執行,test1.sh中定義的變數,就影響 到了test2.sh。 如果我們再建一個test3.sh #!/bin/bash echo "test3:$aaa" 把test2.sh改成: #!/bin/bash source /root/test1.sh echo "test2:$aaa" /root/test3.sh 執行test2.sh: [
[email protected]
~]# sh test2.sh test1:yuanfaxiang test2:yuanfaxiang test3: 結果顯示test3.sh沒有繼承test1.sh中申明的變數,因為source /root/test1.sh只是讓test1.sh 中的變數在test2.sh中生效,aaa畢竟還是個普通區域性變數,並不能被test3.sh這個子shell所繼承, 所以我們可以想到環境變數,把aaa變成test2.sh這個指令碼的環境變數,讓test2.sh的子程序也能繼承。 將test1.sh改成: #!/bin/bash export aaa=yuanfaxiang echo "test1:$aaa" 執行test2.sh後有如下結果: [
[email protected]
~]# sh test2.sh test1:yuanfaxiang test2:yuanfaxiang test3:yuanfaxiang 在test1.sh中聲明瞭環境變數也就是全域性變數,在test2.sh中用source執行test1.sh,將變數帶到了 test2.sh中,並使之成為test2.sh執行過程中的環境變數,可以被test2.sh的子程序繼承,起到了順向 傳遞效果。
轉載自:

相關推薦

變數shell指令碼傳遞

前幾篇文章中已經介紹過區域性變數和環境變數的含義,接下來我們來拓展下,看看變數怎樣實現在shell指令碼 中的傳遞shell指令碼其實是用當前shell的子shell去執行的,所以在shell指令碼中定義的普通變數只適用於當前 shell的子shell環境,也就是說在當前s

Perl指令碼傳遞引數

          'BIN_DIR' => 'G://mssql2005//MSSQL.1//MSSQL//Binn',          'TRAN_DIR' => 'H://INTEL_TRAN_DUMPS//GDCPW1169',          'DUMP_DIR' => 'H:

shell指令碼引數傳遞和main函式引數傳遞方式類似

shell指令碼 test.sh呼叫的時候傳入引數,param1,param2: #test.sh param1 param2 那麼在指令碼內部相當於把 test.sh param1 param2 看成三個引數出入,所以引數0為$0 (test.sh),引數1為$1 (pa

shell指令碼 函式傳遞引數

在一個指令碼中,多個函式之間可能需要相互傳遞引數,之前一直對引數的傳遞以及引用有些疑問,今天做了幾個小測試例子 1、#!/bin/bash function f1(){ local param1=$1 echo "f1"$param1 f2 $param1 }

[shell指令碼筆記]基礎/變數

一些基礎用法 #! /bin/bash 宣告使用的shell名稱 exit 0正常退出,exit 1錯誤退出 shell指令碼內增加一行set -x,在執行shell指令碼時($sh -x run.sh),會打印出每一行命令的返回值,從而便於進行除錯。 變數 例子:用於判斷上一步的結果執行正確再執行下

shell指令碼變數

首行:#!/bin/bash #!符號能夠被核心識別成為一個指令碼的開始,這一行必須位於指令碼的首行 註釋:# 除去第一行的# 內容:可執行結構和內容 建立檔案的方式: touch echo “” > first.sh 注:向檔案輸入””中的內容 > 是覆蓋

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

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

jmeter 傳送加密請求 beanshell斷言 執行緒組傳遞引數 jmeter bean shell斷言加密的響應資訊(加密介面測試二) jmeter 執行緒組之間的引數傳遞(加密介面測試三)

    原文地址https://www.cnblogs.com/wnfindbug/p/5817038.html 最近在做http加密介面,請求頭的uid引數及body的請求json引數都經過加密再發送請求,加密方式為:ase256。所以,jmeter傳送請求前也需要對uid及jso

shell指令碼變數基礎學習整理

1.linux系統環境 echo 'echo /etc/profile ' >> /etc/profile echo 'echo /etc/bashrc' >> /etc/bashrc echo 'echo /root/.bashrc ' >> /root/.bas

[轉載] Linux export變數的生命週期和shell的生命週期相同,即shell指令碼執行完畢後,相應的export變數便失效了

說說shell指令碼中的export 和 source,bash 小弟剛剛接觸linux,對linux上的很多東西都比較陌生,所以寫一寫部落格,當做自己工作的總結和技術的積累吧,也是鞭策自己不斷努力的去學習。 今天之所以起這個標題,把export,source ,bash這三個命令放在一起講

Liunx----Shell指令碼簡單介紹 Shell執行環境和Shell變數

Shell 指令碼(shell script),是一種為 shell 編寫的指令碼程式。 Shell 程式設計跟 java、php 程式設計一樣,只要有一個能編寫程式碼的文字編輯器和一個能解釋執行的指令碼直譯器就可以了。 Linux 的 Shell 種類眾多,常見的有: Bourne Shell(

shell指令碼學習第三彈-變數的使用

shell指令碼學習第三彈-變數的使用 一、什麼是變數 相信大家聽到變數這個詞語很敏感吧,我們的C語言中也有所謂的變數,變數即在程式執行過程中它的值是允許改變的量。 也可以這麼說,變數的本質是一種鍵值對,舉個例子來說:str=“123456”,“12345”就是鍵值對中的Val

bash shell 指令碼變數的學習

Shell 指令碼(shell script),是一種為 shell 編寫的指令碼程式。 業界所說的 shell 通常都是指 shell 指令碼,但讀者朋友要知道,shell 和 shell script 是兩個不同的概念。 (需要有一丁點點點點的 Linux命令 基礎,

Linux通過cat EOF新建檔案並新增或追加內容方法並在shell指令碼中配置環境變數時使用

cat << EOF >實現新建檔案並新增內容 [email protected]:/opt# cat << EOF >abcd.txt > 1 > 2 > 3 > eof > EOF [email

2.shell指令碼變數

1.變數命名法則 1、不能使程式中的保留字:例如if, for 2、只能使用數字、字母及下劃線,且不能以數字開頭 3、見名知義 4、統一命名規則:駝峰命名法 5、=前後不要帶空格 6、字串建議加" " :如name=“chenjuxni” 變數引用: 語法:$

結合linux 環境變數的理解shell指令碼 if.......then語句及test命令

"uenvboot=" \ "if run sd_uEnvtxt_existence_test; then " \ "run loadbootenv; " \ "echo Loaded environment from ${bootenv}; " \

Linux shell 指令碼新增環境變數,監控web 服務是否正常

例項1:寫shell指令碼定義函式設定環境變數路徑 prepend() { [ -d “$2” ] && eval $1="$2${$1:+’:’$$1}" && export $1 } 執行 prepend PATH /opt/myapp/bin 說明:

Shell指令碼(介紹,變數,運算,條件判斷,迴圈,函式)

shell是人機互動的翻譯 注意的是,shell和Linux核心合在一起才是Linux。 Shell指令碼命令由兩種工作方式, 一種是互動式,寫一句命令,執行一句命令 一種是批處理,一次執行多個命令,先把命令寫好,然後在執行  舉個例子: [[emai

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

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

shell指令碼第一行使用環境變數

Shell 既是一種指令碼程式語言,也是一個連線核心和使用者的軟體。 常見的 Shell 有 sh、bash、csh、tcsh、ash 等。 在Linux的一些腳本里,需在開頭一行指定指令碼的解釋程式,如: #!/usr/bin/env Python 再如: #!/us