Linux系統Shell腳本語言之點指令

jasontang 發佈 2024-05-08T04:03:04.905216+00:00

摘要:Shell就是一個命令行解釋器,其作用是解釋執行用戶的命令,用戶輸入一條命令,Shell就解釋執行一條。

摘要:Shell就是一個命令行解釋器,其作用是解釋執行用戶的命令,用戶輸入一條命令,Shell就解釋執行一條。shell還有一種執行命令的方式稱為批處理(Batch),用戶事先寫一個Shell腳本(Script),其中有很多條命令,讓Shell一次把這些命令執行完,而不必一條一條地敲命令。前幾天寫過一個清除備份文件的腳本delbackup.sh,直接執行# sh delbackup.sh是正常運行的,但是放到crontab中卻無法運行。經過檢查,發現是環境變量的問題。解決問題的辦法是在sh腳本程序中加入環境變量。

本文主要介紹環境變量的引入方法。詳細內容請參考下文。

一、查看環境變量

1、登陸linux系統

2、查看環境變量"~/.bash_proFile"文件裡面的內容

備註:可以看到~/.bash_profile文件先調用~/.bashrc,然後再把PATH加載。

二、shell腳本優化

1、執行指令# printenv查看當前shell進程的環境變量

說明:Shell變量可以分為環境變量和本地變量。一個shell變量定義後僅存在於當前Shell進程,是一個本地變量。用export命令可以把本地變量導出為環境變量。

2、通過點指令引入環境變量

備註:在編寫標本的時候,加入兩個環境變量/etc/profile和~/.bash_profile。

3、點指令和source命令

(1)、shell腳本執行方法

說明:Shell有兩種執行腳本的方法,一種是新產生一個shell,然後執行相應的shell scripts;一種是在當前shell下執行,不再啟用其他shell。

新產生一個shell然後再執行scripts的方法是在scripts文件開頭加入語句:#!/bin/sh。一般的script文件(.sh)即是這種用法。這種方法先啟用新的sub-shell(新的子進程),然後在其下執行命令。

另外一種方法就是使用source命令,不再產生新的shell,而在當前shell下執行一切命令。source: source命令即點(.)命令。在 bash下輸入man source,找到source命令解釋處,可以看到解釋"Read and execute commands from filename in the current shell environment and ..."。從中可以知道,source命令是在當前進程中執行參數文件中的各個命令,而不是另起子進程。

(2)點指令和source命令詳解

source命令用法 #source FileName

表示在當前bash環境下讀取並執行FileName中的命令。

備註:source命令通常用指令「.」來替代。

使用範例:

source filename

# 中間有空格

. filename

source命令(從 C Shell 而來)是bash shell的內置命令。點命令,就是個點符號,(從Bourne Shell而來)是source的另一名稱。

source(或點)命令通常用於重新執行剛修改的初始化文檔,如 .bash_profile 和 .profile 這些配置文件。假如在登錄後對 .bash_profile 中的 EDITER 和 TERM 變量做了修改,這時就可以用 source 命令重新執行 .bash_profile文件,使修改立即生效而不用註銷並重新登錄。

(3)、點指令和source命令使用實例

實例:$source ~/.bashrc 或者

$. ~/.bashrc

這兩個指令都表示,指令執行後 ~/.bashrc 中的內容立即生效。

備註:source命令(從 C Shell 而來)是bash shell的內置命令。點命令,就是個點符號,(從Bourne Shell而來)是source的另一名稱。同樣的,當前腳本中設置的變量也將作為腳本的環境,source(或點)命令通常用於重新執行剛修改的初始化文件,如 .bash_profile 和 .profile 等等。例如,如果在登錄後對 .bash_profile 中的 EDITER 和 TERM 變量做了修改,則能用source命令重新執行 .bash_profile 中的命令而不用註銷並重新登錄。

(4)、source filename 與 sh filename 及./filename執行腳本的區別

當shell腳本具有可執行權限時,用sh filename與./filename執行腳本是沒有區別得。./filename是因為當前目錄沒有在PATH中,所有」.」是用來表示當前目錄的。

sh filename 重新建立一個子shell,在子shell中執行腳本裡面的語句,該子shell繼承父shell的環境變量,但子shell新建的、改變的變量不會被帶回父shell,除非使用export。

source filename:這個命令其實只是簡單地讀取腳本裡面的語句依次在當前shell裡面執行,沒有建立新的子shell。那麼腳本裡面所有新建、改變變量的語句都會保存在當前shell裡面。

關鍵字: