歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 淺談Linux內部環境變量

淺談Linux內部環境變量

日期:2017/2/28 14:22:04   编辑:Linux教程

我們在Window的環境安裝Java,必須先配置環境變量才可以運行Java的虛擬機。當然,在Linux安裝Java Oracle同理也要配置path,java_home等,環境變量。

常見的環境變量有$OSTYPE $MACHTYPE $LINENO $HOSTTYPE $HOME $GLOBIGNORE $FUNCNAME $DIRSTACK $MACHTYPE……..這些內部環境變量在寫腳本的時候很有用!

我現在就聊下有意思的環境變量,先是BASH_VERSINFO[n](n=1,2,3,4,5)

# Bash version info:
for n in 0 1 2 3 4 5
do
echo "BASH_VERSINFO[$n] = ${BASH_VERSINFO[$n]}"
done
# BASH_VERSINFO[0] = 2 #主要版本號
# BASH_VERSINFO[1] = 05 # 次要版本號.
# BASH_VERSINFO[2] = 8 # 補丁層次
# BASH_VERSINFO[3] = 1 # 創建版本
# BASH_VERSINFO[4] = release # 發行狀態.
# BASH_VERSINFO[5] = i386-RedHat-linux-gnu # 架構
# (與 $MACHTYPE一樣).
$FUNCNAME
xyz23 ()
{
echo "$FUNCNAME now executing." # xyz23 now executing.
}
xyz23
echo "FUNCNAME = $FUNCNAME" # FUNCNAME =
# 在函數外面是空值
$IFS
輸入區域分隔
默認是space, tab, and newline(/n), 但是也可能改變,比如去解析一個數據分隔符
注意$* 用在第一地址空間 在 $IFS裡.
bash$ echo $IFS | cat -vte
bash$ bash -c 'set w x y z; IFS=":-;"; echo "$*"'
#w:x:y:z
Example $IFS and whitespace

#!/bin/bash
# $IFS treats whitespace differently than other characters.
output_args_one_per_line()
{
forarg
do echo "[$arg]"
done
}
echo; echo "IFS=\" \""
echo "-------"
IFS=" "
var=" a b c "
output_args_one_per_line $var # output_args_one_per_lines輸出" a b c "`#
# [a]
# [b]
# [c]
echo; echo "IFS=:"
echo "-----"
IFS=:
var=":a::b:c:::" # 與上面相同 但是替換":" 成 " ".
output_args_one_per_line $var
#
# []
# [a]
# []
# [b]
# [c]
# []
# []
# []
echo
exit 0

$LINENO
這個變量常在腳本裡出現. 對於調bug很有用
# *** BEGIN DEBUG BLOCK ***
last_cmd_arg=$_ # Save it.
echo "At line number $LINENO, variable \"v1\" = $v1"
echo "Last command argument processed = $last_cmd_arg"

$PWD
工作目錄(你現在在的目錄)
刪除目錄腳本!!!!
#!/bin/bash
E_WRONG_DIRECTORY=73
clear # Clear screen.
TargetDirectory=/home/bozo/projects/GreatAmericanNovel
cd $TargetDirectory
echo "Deleting stale files in $TargetDirectory."
if [ "$PWD" != "$TargetDirectory" ]
then
echo "Wrong directory!"
echo "In $PWD, rather than $TargetDirectory!"
echo "Bailing out!"
exit $E_WRONG_DIRECTORY
fi
rm -rf *
rm .[A-Za-z0-9]* # 刪除帶點的文件(比如隱藏文件)
# rm -f .[^.]* ..?* 移除多個點的文件


$REPLY

$SECONDS
這個變量是計算腳本運行的多長時間
#!/bin/bash
ENDLESS_LOOP=1
INTERVAL=1
echo
echo "Hit Control-C to exit this script."
echo
while [ $ENDLESS_LOOP ]
do
if [ "$SECONDS" -eq 1 ]
then
units=second
else
units=seconds
fi
echo "This script has been running $SECONDS $units."
sleep $INTERVAL
done
exit 0


Example. Timed read
#!/bin/bash
TIMELIMIT=4 # 4 seconds
read -t $TIMELIMIT variable <&1
echo
if [ -z "$variable" ]
then
echo "Timed out, variable still unset."
else
echo "variable = $variable"
fi
exit 0
$UID
可以檢查是不是root用戶,可用於固件硬化
Example 9-5. Am I root?
#!/bin/bash
ROOT_UID=0 # root用戶$UID 0.
if [ "$UID" -eq "$ROOT_UID" ] then
echo "You are root."
else
echo "You are just an ordinary user (but mom loves you just the same)."
fi
exit 0
# ============================================================= #
##著有另一個方法
ROOTUSER_NAME=root
username=ìd -nu`
# orusername=`whoami`
ìf [ "$username" = "$ROOTUSER_NAME" ]
then
echo "Rooty, toot, toot. You are root."
else
echo "You are just a regular fella."
fi

$#
命令行第二個表達式或者是單個的變量
$*
所有的單個參數,就想一個單詞一樣
$@
與 $*一樣, 但是每一個參數是一個限定的字符串, 因此字符串是功過交互, 沒有多余的作用,意思就是,在其他的字符串裡每一個字符串都看成一個分隔的單詞。
Example arglist: Listing arguments with $* and $@


#!/bin/bash
E_BADARGS=65
if [ ! -n "$1" ]
then
echo "Usage: `basename $0àrgument1 argument2 etc."
exit $E_BADARGS
fi
echo
index=1
echo "Listing args with \"\$*\":"
for arg in "$*" # 不起作用"$*" 不是限制.
do
echo "Arg #$index = $arg"
let "index+=1"
done # $* 看成是所有的表達是的單個單詞
echo "Entire arg list seen as single word."
echo
index=1
echo "Listing args with \"\$@\":"
forarg in "$@"
do
echo "Arg #$index = $arg"
let "index+=1"
done # $@ 看所有的額變大事是一個分隔的單詞
echo "Arg list seen as separate words."
echo
exit 0

還可以加一個特別有意思的,加一個shift,前面的一個數值就會消失,小伙伴可以試試。
.
#!/bin/bash
# Invoke with ./scriptname 1 2 3 4 5
echo "$@" # 1 2 3 4 5
shift
echo "$@" # 2 3 4 5
shift
echo "$@" # 3 4 5
# Each "shift" loses parameter $1.

其他特殊參數
$-
在腳本裡作為一個標記,一個作用就是可以交互自測
$!
PID (process id) 最後一個進程
$_
這個特殊變量的值是設置在提交前的的值
Example 9-9. underscore variable
#!/bin/bash
echo $_ # /bin/bash
du >/dev/null #沒有輸出
echo $_ # du
ls -al >/dev/null # 沒有輸出
echo $_ # -al (last argument)
:
echo $_
reference:Advanced.Bash.Shell.Scripting.Guid,unix.shell范例精講。

設置Linux環境變量的方法和區別 http://www.linuxidc.com/Linux/2015-02/113488.htm

Linux 下三種方式設置環境變量 http://www.linuxidc.com/Linux/2015-01/111459.htm

Ubuntu 14.04安裝JDK1.8.0_25與配置環境變量 http://www.linuxidc.com/Linux/2015-01/112030.htm

Linux安裝JDK和配置環境變量 http://www.linuxidc.com/Linux/2014-11/109598.htm

Linux教程分享:如何為sudo命令定義PATH環境變量 http://www.linuxidc.com/Linux/2014-09/106076.htm

Copyright © Linux教程網 All Rights Reserved