1.二source和export的区别
1:source+脚本:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。(点命令和source是一样的)脚本可以不赋予执行权限, source也能执行,source过的变量不能往子进程传,在子进程中认不到这个变量
2:在父进程中export A 后,在子进程中就可以使用变量A了。
3. sh+脚本:重新建立一个子shell执行脚本里面的语句,该子shell继承父shell的变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。跟./一样:q!
实验例子1:
在/tmp下写两个脚本例子
date.sh
#/bin/bash
named=dog
echo -e "named=$named \n"
named1=dog1
echo -e "named1=$named1 \n"
在执行这个脚本之前
#unset named
#unset named1
然后用两种方式执行这个脚本
1:
#./date.sh
#echo $named
#echo $named1
2:
#source date.sh //或 #. date.sh
#echo $named
#echo $named1 //证明第一个结论
实验例子2:
新建一个脚本为ttt.sh,内容如下
echo -e "named=$named \n"
echo -e "named1=$named1 \n"
运行脚本
./ttt.sh //看结果,无内容输出,说明source过的变量不能往子进程传,在子进程中认不到这两个变量
修改date.sh文件为
#/bin/bash
named=dog
echo -e "named=$named \n"
export named1=dog1
echo -e "named1=$named1 \n"
那么接下来也将用两种方式来运行这个脚本(source和./)
#./data.sh (在当前bash中建立新的子进程执行该shell,export过的变量在该子进程及其子孙进程中有效)
#./ttt.sh (在当前bash中建立的另外的新的子进程,与上面的子进程不是同一个)
第二种方式
#source data.sh
#./ttt.sh
export过的变量会在屏幕上显示
2.文件检查及创建
#!/bin/bash
#function:check /usr/local/diy/diy1.if not exist,then touch it
#author xxx 20131202
if [ -d /usr/local/diy ] ;then
if [ ! -f /usr/local/diy/diy1 ];then
echo "/usr/local/diy/diy1 not exist,now touch it."
touch /usr/local/diy/diy1
else
echo "/usr/local/diy/diy1 exist"
fi
else
if [ -e /usr/local/diy ];then
echo "/usr/local/diy exist and not directory,/usr/local/diy mkdir failed"
else
echo "/usr/local/diy not exist,now mkdir it,then touch /usr/local/diy/diy1"
mkdir /usr/local/diy
touch /usr/local/diy/diy1
fi
fi
3.check_swap
#!/bin/bash
#function:check swap usage
#author:xxxx 20131203
WARNLEVEL=30
CRITLEVEL=60
CRITICAL_STATE=2
WARNING_STATE=1
OK_STATE=0
SWAPTOTAL="`free |grep -i swap |awk '{print $2}'`"
SWAPUSED="`free |grep -i swap |awk '{print $3}'`"
SWAPFREE="`free |grep -i swap |awk '{print $4}'`"
USEPCT=`echo "scale=3; $SWAPUSED / $SWAPTOTAL * 100" |bc -l`
#echo "USEPCT=$USEPCT"
if [ `echo "$USEPCT > $CRITLEVEL" |bc` -eq 1 ];then
echo "CRITICAL Swap usage is ${USEPCT}%"
exit ${CRITICAL_STATE}
fi
if [ `echo "$USEPCT > $WARNLEVEL" |bc` -eq 1 ];then
echo "WARNING Swap usage is ${USEPCT}%"
exit ${WARNING_STATE}
fi
if [ `echo "$USEPCT < $WARNLEVEL" |bc` -eq 1 ];then
echo "OK Swap usage is ${USEPCT}%"
exit ${OK_STATE}
fi