日期
# 取前一天
date -d ’1 days ago’ +%Y-%m-%d
命令?e名?定功能: (alias)
alias ll=’ls -al’
一些特殊值
$$:(?於本 shell 的 PID)
$!:得到子進程的進程PID,例如nohup的命令可以通過這個擷取PID
$?:(?於上???絛兄噶畹幕?髦?
$#: 參數個數
$@ :代表『 “$1″ “$2″ “$3″ “$4″ 』
$* :代表『 “$1c$2c$3c$4″ 』,其中 c ?櫸指餱衷?/p>
declare
數值計算要用 declare -i sum=100+12
也可以用sum=$((100+12))計算
[root@www ~]# declare [-aixr] variable
?????擔?br />-a :?⑨崦婷? variable 的??刀?x成?殛?列 (array) ?型
-i :?⑨崦婷? variable 的??刀?x成?檎??底 (integer) ?型
-x :用法? export 一?櫻?褪?⑨崦嫻 variable ?成?境??擔?br />-r :?⒆??翟O定成? readonly ?型,???擋豢殺桓??熱藎?膊荒 unset
數組
var[1]=”small min”
echo $(var[1])
刪除/替換字元
echo ${PATH#/usr*:} #從前到後開始刪除掉第一個合格字元
echo ${PATH##/usr*:} #從前到後開始刪除掉所有合格字元
也可以從後面開始,就是把#號替換成%號
echo ${PATH/usr/USR} #替換
echo ${PATH//usr/USR} #替換所有
&&和||
可以把多條命令串起來,例如
ls ./test/||mkdir ./test/ #如果目錄不存在,建立一個
判斷
使用中括弧時注意空格必須要有[ -e "xxx" ]
文法
if [ "$name" == "Fatkun" ]; then
echo "Hi!Fatkun"
elif [ ... ]; then
echo "..."
else
echo "..."
fi
?y?的?蘇I 代表意?
1. ?於某???n名的『?n案?型』判?啵? test -e filename 表示存在否
-e ?『?n名』是否存在?(常用)
-f ?『?n名』是否存在且??n案(file)?(常用)
-d ?『?n名』是否存在且?檳誇?(directory)?(常用)
-b ?『?n名』是否存在且?橐?? block device ?置?
-c ?『?n名』是否存在且?橐?? character device ?置?
-S ?『?n名』是否存在且?橐?? Socket ?n案?
-p ?『?n名』是否存在且?橐?? FIFO (pipe) ?n案?
-L ?『?n名』是否存在且?橐?????n?
2. ?於?n案的?嘞??y,如 test -r filename 表示可?否 (但 root ?嘞蕹S欣??
-r ??y??n名是否存在且具有『可?』的?嘞蓿
-w ??y??n名是否存在且具有『可??』的?嘞蓿
-x ??y??n名是否存在且具有『可?絛小壞?嘞蓿
-u ??y??n名是否存在且具有『SUID』的?儺裕
-g ??y??n名是否存在且具有『SGID』的?儺裕
-k ??y??n名是否存在且具有『Sticky bit』的?儺裕
-s ??y??n名是否存在且?欏悍強瞻?n案』?
3. ????n案之?的比?,如: test file1 -nt file2
-nt (newer than)判? file1 是否比 file2 新
-ot (older than)判? file1 是否比 file2 ?
-ef 判? file1 ? file2 是否?櫫??n案,可用在判? hard link 的判定上。 主要意?在判定,????n案是否均指向同一?? inode 哩!
4. ?於???整?抵?g的判定,例如 test n1 -eq n2
-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)
5. 判定字串的?料
test -z string 判定字串是否? 0 ?若 string ?榭兆執??t? true
test -n string 判定字串是否非? 0 ?若 string ?榭兆執??t? false。
?: -n 亦可省略
test str1 = str2 判定 str1 是否等於 str2 ,若相等,?t回? true
test str1 != str2 判定 str1 是否不等於 str2 ,若相等,?t回? false
6. 多重?l件判定,例如: test -r filename -a -x filename
-a (and)???r同?r成立!例如 test -r file -a -x file,?t file 同?r具有 r ? x ?嘞?r,才回? true。
-o (or)???r任何一??成立!例如 test -r file -o -x file,?t file 具有 r 或 x ?嘞?r,就可回? true。
! 反相??B,如 test ! -x file ,? file 不具有 x ?r,回? true
case文法
case $??得?Q in <==??字? case ,?有??登壩繡X字?
"第一?????熱?quot;) <==每?????熱萁ㄗh用?引?括起?恚?P?字?t?樾±ㄌ? )
程式段
;; <==每????e?尾使用?????的分??硤?理!
"第二?????熱?quot;)
程式段
;;
*) <==最後一?????熱荻?? * ?澩?硭?釁淥??br /> 不包含第一?????熱菖c第二?????熱蕕鈉淥?淌?絛卸?br /> exit 1
;;
esac <==最?的 case ?尾!『反????』思考一下!
while文法
while [ condition ] <==中括??鵲??B就是判?嗍?br />do <==do 是?圈的?始!
程式段落
done <==done 是?圈的?束
for…do…done文法
for var in con1 con2 con3 ...
do
程式段
done
for((i=1;i<100;i++));do
echo $i
done
軟連結替換
ln -snf ./hive-0.7.1/ hive
利用grep和gawk,xargs來kill
xargs會把gawk的每一行變成kill的參數,如 kill 1 2 3
grep -v 是排除
ps -ef|grep scott|grep -v grep|gawk {‘print $1′}|xargs kill
sed命令替換文本
sed -i "s/oldstring/newstring/g" `grep oldstring -l yourdir` #在原檔案修改
sed "s/oldstring/newstring/g" file >file.new # 輸出到其他檔案
tar
tar --exclude=./xxx/Cache --exclude=*/log/* -cvzf xxx_`date +"%Y-%m-%d_%H_%M"`.tar.gz ./xxx
擷取機器IP
/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"