環境變量:能夠在全部的用戶進程中使用。登陸進程是父進程,shell進程是子進程。父進程初始化環境變量,子進程就均可以使用了。對應的聲明文件是:/etc/profile 、~/wuxiangdong/.bash_profileshell
變量的聲明方式,export JAVA_HOME='/usr/local/jdk7'編程
本地變量(局部變量) :做用域在一個shell,關閉終端,再開啓一個,原來聲明的變量不見了;變量設置爲只讀後不可廢棄,不可修改。變量的聲明方式:LOCALTEST=‘HELLO,BOY’echo$LOCALTEST。bash
局部變量:做用域只對當前的代碼段有效,local VARNAME=value。ide
位置變量:$1,$2,$3,$4這樣的變量,取參數的位置。測試
特殊變量:spa
$?上一個命令的狀態返回值。命令行
$#參數的個數orm
$*參數列表繼承
$@參數列表進程
$0命令自己 腳本自己
程序狀態返回代碼(0-255) 0: 正確執行 1-255:錯誤執行,1,2,127系統預留;
注意:
set命令結果是與shell類型有關。
env查詢的是當前用戶全部的環境變量的狀況。
export 查詢的是當前導出成用戶變量的shell變量。
撤銷變量:unset
變量名稱:
一、只能包含字母、數字和下劃線,而且不能數字開頭;
二、不該該跟系統中已有的環境變量重名;
三、最好作到見名知義;
變量聲明格式:
declare -i SUM=0
integer
-x(聲明成環境變量)
let A=0;(聲明算術變量)
測試腳本是否有語法錯誤:
bash -n 腳本 檢查是否是有錯誤
bash -x 腳本:單步執行
3.shell編程基礎
1)shebang:魔數
#!/bin/bash
#開頭的是註釋行,是不執行的。
/dev/null :軟件設備,bit bucket,數據黑洞。
注意事項:
腳本在執行時會啓動一個子shell進程;
命令行中啓動的腳本會繼承當前shell環境變量
系統自動執行的腳本(非命令行啓動)就須要自我定義須要各環境變量;
2)腳本的開始
SHELL-1
1 #有沒有bash結尾的用戶,有顯示出來,沒有顯示沒有!
2 #!/bin/bash
3 #
4 LINES=`grep "\<bash$" /etc/passwd | wc -l `
5 USERS=`grep "\<bash$" /etc/passwd | cut -d: -f1`
6 if [ $LINES -gt 0 ]; then
7 echo -n "there are $USERS"
8 else
9 echo "no such user."
10 fi
11
提示:「引用」一個命令的執行結果,要使用命令引用;好比: RESAULTS=`wc -l /etc/passwd | cut -d: -f1`;
使用一個命令的執行狀態結果,要直接執行此命令,必定不能引用;好比: if id user1一句中的id命令就必定不能加引號;
若是想把一個命令的執行結果賦值給某變量,要使用命令引用,好比USERID=`id -u user1`;
若是想把一個命令的執行狀態結果保存下來,並做爲命令執行成功與否的判斷條件,則須要先執行此命令,然後引用其狀態結果,如
id -u user1
RETVAL=$?
SHELL-2
給定一個文件,好比/etc/inittab
判斷這個文件中是否有空白行;
若是有,則顯示其空白行數;不然,顯示沒有空白行。
#!/bin/bash
LINES=`grep "^$" /etc/inittab|wc -l`
if [ $LINES -gt 0 ];then
echo "$LINES"
else
echo "NO Blank"
fi
SHELL-3
練習:寫一個腳本
給定一個用戶,判斷其UID與GID是否同樣
若是同樣,就顯示此用戶爲「good guy」;不然,就顯示此用戶爲「bad guy」。
#!/bin/bash
USERNAME=user1
USERID=`id -u $USERNAME`
GROUPID=`id -g $USERNAME`
if [ $USERID -eq $GROUPID ]; then
echo "Good guy."
else
echo "Bad guy."
fi
若是不用id命令
#!/bin/bash
#
USERNAME=user1
if ! grep "^$USERNAME\>" /etc/passwd &> /dev/null; then
echo "No such user: $USERNAME."
exit 1
fi
USERID=`grep "^$USERNAME\>" /etc/passwd | cut -d: -f3`
GROUPID=`grep "^$USERNAME\>" /etc/passwd | cut -d: -f4`
if [ $USERID -eq $GROUPID ]; then
echo "Good guy."
else
echo "Bad guy."
fi