////////////////////////////////// 說明 //////////////////////
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
沒有留言:
張貼留言