2010年6月11日 星期五

Shell script

////////////////////////////////// 說明 //////////////////////


1. 開頭要用
#!/bin/sh 代表使用 /bin/sh 執行檔
{{{
lrwxrwxrwx 1 root root 4 1月 11 19:38 /bin/sh -> bash
}}}

/////////////////////////////// 變數觀念 /////////////////////
1. $? 代表前個指令回傳值
2. export 是將自訂變數轉成環境變數, 並帶到接下來的 shell 去取得(參考鳥哥).
例如; {{{
export GAP_HOME=$GAP_HOME
$JAVA_HOME/bin/javac -classpath $CP VQSClientTestBean.java
$JAVA_HOME/bin/java -classpath $CP VQSClientTestBean
}}}
3. 變數是用 variab=value 表式
4. 當要用 variable 時, 要用 $ sysbol 在前面
注意: $variable 不是 variable 而是取值


////////////////////////////// 邏輯判斷 //////////////////////
------------------- 判斷語法 -----------------------
if [ 條件判斷式 ]; then
...
fi <==將 if 反過來寫

而條件判斷式因為不同比較對象會有不同比較子:
1 整數比較
-eq 兩數值相等 (equal)
-ne 兩數值不等 (not equal)
-gt n1 大於 n2 (greater than)
-lt n1 小於 n2 (less than)
-ge n1 大於等於 n2 (greater than or equal)
-le n1 小於等於 n2 (less than or equal)
例如:
[ 1 -ne 0 ]

2.字串比較
. 判定字串的資料
-z 判定字串是否為 0 ?若 string 為空字串,則為 true
-n 判定字串是否非為 0 ?若 string 為空字串,則為 false。
= 判定 str1 是否等於 str2 ,若相等,則回傳 true
!= 判定 str1 是否不等於 str2 ,若相等,則回傳 false

範例:
[ "$X509_USER_PROXY" != "/tmp/x509up_u501" ]

---------------------- 條件連接語法 ---------------------------
最常用是且 (&&) 與或 (|||)
if [ 條件判斷式1 ] && [ 條件判斷式1 ]; then
..
fi


---------------------- 條件另一個語法 ---------------------------
使用方括弧 [] , 若成功會回傳 true.
e.g [ -f /home/Andy/.globus/DeHua.p12 ] && echo haha


---------------------- 迴圈語法 ---------------------------
for {variable} in {array}
do
.....
done





//////////////////// 範例 ////////////////////////

From wayne
{{{
#!/bin/sh

if [ "x$X509_USER_PROXY" != "x" ] && [ "$X509_USER_PROXY" != "/tmp/x509up_u501" ] && [ -e $X509_USER_PROXY ]; then
voms-proxy-info -e > /dev/null 2>&1
if [ $? -ne 0 ]; then
java -jar /opt/gap-LCG-GLITE/apps/shell/euasia-proxy.jar $X509_USER_PROXY >&2
voms-proxy-info -all >&2
fi
fi
~
}}}


For for loop
{{{
#!/bin/sh

CP=/tmp/code/datawarehouse
for path in $(find /opt/apache-tomcat-5.5.27/webapps/gcp/WEB-INF/lib/ -name *.jar);
do
#echo $path
CP="$CP:$path";
done

javac -classpath $CP GapUserInit.java

}}}


for judgement []
e.g [ -f /home/Andy/.globus/DeHua.p12 ] && echo haha


///////////////////////////////
樣式及樣式比對:

${variable%pattern} 刪除與pattern 相似地方, 回傳其餘部份.
但條件是 varaible.
{{{
TTT=phylip-3.19.tar.gz
echo ${TTT%.tar.gz} <--- phylip-3.19
}}}


////////////////////////////
Reference
good: http://linuxconfig.org/Bash_scripting_Tutorial#9-bash-if--else--fi-statements
http://lowfatlinux.com/linux-perl-looping.html

沒有留言:

張貼留言