shell指令碼編程講解2

來源:互聯網
上載者:User

shell指令碼編程講解2

自訂環境變數(全域變數)

設定環境變數

如果想設定環境變數,就要在給變數賦值之後或設定變數時使用export命令,帶-x選項的declare

內建命令也可可以同樣完成功能(注意:輸出變數時不要在變數名前面加$)

格式:

①export變數名=value

②變數名=value;export變數名

③ declare -x變數名=value

執行個體:

1.當前生效

exportOLDBOY="oldboy"

echo $OLDBOY

2.對目前使用者有效

vi .bash_profile

3.對所有使用者都生效

vi /etc/profile

source /etc/profile 或 . ./etc/profile

顯示與取消環境變數

通過echo 命令列印環境變數

$HOME使用者登陸時進入的目錄

$UID 目前使用者的UID(使用者標識)

$PWD 當前工作目錄的絕對路徑名

$SHELL 當前SHELL

$USER目前使用者

[oldboy@mode ~]$ echo $HOME

/home/oldboy

[oldboy@mode ~]$ echo $UID

501

[oldboy@mode ~]$ echo $PWD

/home/oldboy

[oldboy@mode ~]$ echo$SHELL

/bin/bash

[oldboy@mode ~]$ echo $USER

oldboy

用env{printenv}或set顯示預設的環境變數

[oldboy@mode ~]$

[oldboy@mode ~]$ env

HOSTNAME=mode

SHELL=/bin/bash

TERM=vt100

OLD=old

HISTSIZE=1000

LC_ALL=C

USER=oldboy

LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=

01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*

.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.l

zh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31

:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35

:*.png=01;35:*.tif=01;35:

MAIL=/var/spool/mail/oldboy

PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sersync/bin:/usr/local

/mysql/bin:/usr/local/mysql/scripts:/usr/local/mysql:/home/oldboy/bin:/home/oldboy/bi

n

INPUTRC=/etc/inputrc

PWD=/home/oldboy

LANG=en_US.UTF-8

OLDBOY=oldboy

SHLVL=1

HOME=/home/oldboy

LOGNAME=oldboy

CVS_RSH=ssh

LESSOPEN=|/usr/bin/lesspipe.sh%s

G_BROKEN_FILENAMES=1

_=/bin/env

或則set -a

[oldboy@mode ~]$ id -u

501

[oldboy@mode ~]$ echo $UID

501

用unset消除本地變數和環境變數

echo $USER

unset USER

局部變數

定義本地變數

一般字元串變數定義

變數名=value

變數名='value'

變數名=“value”

輸出 echo “a=$a”

或者 echo “a=${a}”

有關單引號.雙引號與不加引號的簡要說明如下:

單引號:

可以說是所見即所得 (WYSIWYG):即將單引號的內容原樣輸出,或者描述為單引號裡面看到底的

是什麼,就輸出什麼

雙引號:

把雙引號內的內容輸出出來;如果內容中有命令,變數等,會先把變數,命令解析出結果,然後

在輸出最終內容來

無引號:

把內容輸出出來,會將含有空格的字串視為一個整體輸出,如果內容中有命令。變數

等,會先把變數,命令解析出結果,然後在輸出最終內容來,如果字串中帶有空格等特殊字元

,則不能完整的輸出,需要改加雙引號,一般連續的字串,資料,路徑等可以用,不過最好用

雙引號替代之

範例1:經過反引號的‘date’命令測試

[root@mode ~]# echo'`date`'

`date`

[root@mode ~]# echo"`date`"

Sat Feb 14 19:25:29 CST2015

[root@mode ~]# echo `date`

Sat Feb 14 19:25:37 CST2015

對於變數的引用,一個 一個是$,另一個是``

範例2:awk調用s[root@mode ~]# ETT=123

[root@mode ~]# awk 'BEGIN{print "$ETT"}'

$ETT

[root@mode ~]# awk 'BEGIN{print '$ETT'}'

123

自訂變數的建議

(1).純數字(不帶空格),定義方式可以不加引號(單或雙),例如

a.oldboyage=33

b.NETWORKING=yes

2.沒有特殊情況,字串一般用雙引號()定義,特別是多個字元創空間有空格時

a.NFSD_NODULE="no load"

b.MyName="Oldboy is handsome boy."

3.變數內容需要原樣輸出時,要用單引號('')

a.OLDBOY_NAME='OLDBOY'

變數的命名規範

1)變數命名要統一,使用全部大寫字母,多個單詞串連使用“_”,引用時,最好以${APACHE}

_ERR_NUM}加大括弧或“${APACHE_ERR_NUM}”外面加雙引號方式引用變數:

2)避免無含義字元或數字:例如下面的COUNT,並不知道其確切含義

3)全域變數定義,如OLDBOY_HOME或OLDBOYHOME,在變數使用時,使用{}將變括起來

或“${OLDBOY_HOME}”

指令碼中局部變數定義:存在於指令碼函數(function)中的變數稱為局部變數,要以local方式進行

聲明,使之之在本函數範圍內有效,防止變數在函數中的命名與變數外部程式中變數重名造成

程式異常,

function TestFunc()

{

local i

for((i=0;i<n;i++))

do

echo 'do something';

done

}

變數合并:當某些變數或配置項要組合起來才有意義時,如檔案的路徑,和檔案名稱,建議將要

組合的變數合并到一起賦值給一個新的變數,這樣既方便之後的調用,也為以後進行修改提供方

便;

例如:VERSION='2.2.22'

SOFTWARE_NAME="httpd"

SOFTWARE_FULLNAME="${SOFTWARE_NAME}-${VERSION}.tar.gz"

把一個命令作為變數

CMD= `ls`wd/

echo $CMD

[root@mode ~]# ls

anaconda-ks.cfg index.html install.log oldboy

grep.log index.html.1 install.log.syslog

[root@mode ~]# CMD=`ls`

[root@mode ~]# echo $CMD

anaconda-ks.cfg grep.logindex.html index.html.1 install.log install.log.syslog

oldboy

在變數名前面加$,可以取得此變數的值,使用echo命令 可以顯示變數的值,$A和${A}的寫法不

同,但是功能一樣,

3${WEEK}day 若變數和其他字元組成新的變數就必須加上大括弧{}

4養成將所有字元創變數用雙引號括起來的使用的習慣,將會減少很多編程是遇到的奇怪的錯誤

生產環境常見應用:

1.對網站按天打包產生不同的檔案名稱。

CMD=$(date +%F)

echo $CMD

echo $(date +%F).tar.gz

echo `date +%F`.tar.gz

tar zcvf etc_$(date +%F).tar.gz/etc

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.