linux中常用的shell脚本,Linux常用shell脚本
1. 設置ssh、scp命令的認證
運行一次腳本后,以后再使用ssh或scp命令登錄遠程機器時不再提示輸入密碼
-----------------setkey.sh開始-------------------------
OLDDIR=`pwd`
if [ -z "$1" ]; then
echo Need user@host info;
exit;
fi;
cd $HOME;
if [ -e "./.ssh/id_rsa.pub" ]; then
cat ./.ssh/id_rsa.pub | ssh $1 'mkdir -p .ssh;cat >> .ssh/authorized_keys';
else
ssh-keygen -t rsa;
cat ./.ssh/id_rsa.pub | ssh $1 'mkdir -p .ssh;cat >> .ssh/authorized_keys';
fi;
cd $OLDDIR
-----------------setkey.sh結束-------------------------
用法:setkey.sh [用戶名]@[要登錄的目標機IP地址]
2. 進程監控程序
定時檢查進程,發現進程掛掉時重啟進程
-----------------loopcheck.sh開始-------------------------
#!/bin/sh
predir=`pwd`
filedir=`dirname $0`
cd "${filedir}"
curdir=`pwd`
logfilename=./loopcheck.log
#-----------------------------------
# 函數: CheckProcess
# 功能: 檢查一個進程是否存在
# 參數: $1 --- 要檢查的進程名稱
# 返回: 如果存在返回0, 否則返回1.
#---------------------------------------
checkprocess()
{
if [ "$1" = "" ]; then
return 1
fi
# $PROCESS_NUM獲取指定進程名的數目,為1返回0,表示正常,不為1返回1,表示有錯誤,需要重新啟動
process_num=`ps -ef |grep "$1" |grep -v "grep" |wc -l`
if [ $process_num -eq 1 ]; then
return 0
else
return 1
fi
}
# 啟動C++進程
startBinProcessByName()
{
/bin/$1 ?> "log.${1}.txt" &
echo "`date` [startBinProcessByName]restart $1 ok" >> ${logfilename}
}
# 主邏輯
while [ 1 ]; do
# 對C++進程進行檢查
tblBins=("gamesvr.bin" "dbsvr.bin")
for tblBin in "${tblBins[@]}";do
checkprocess "${tblBin} server${serverNo}"
check_result=$?
if [ $check_result -eq 1 ]; then
echo "`date` error ${tblBin}" >> ${logfilename}
startBinProcessByName "${tblBin}"
fi
done
# 每隔10秒執行一次
sleep 60
echo "`date` check ok" >> ${logfilename}
done
cd ${predir}
-----------------loopcheck.sh結束-------------------------
3. mysql數據庫表自動修復腳本
-----------------checkdbtable.sh開始-------------------------
#!/bin/sh
mysql_host=localhost
mysql_user=star
mysql_pass=star
database=starcraft27
tables=$(mysql -h$mysql_host -u$mysql_user -p$mysql_pass $database -A -Bse "show tables")
for arg in $tables; do
check_status=$(mysql -h$mysql_host -u$mysql_user -p$mysql_pass $database -A -Bse "check table $arg" ?| awk '{ print $4 }')
if [ "$check_status" = "OK" ]
then
echo "$arg is ok"
else
echo $(mysql -h$mysql_host -u$mysql_user -p$mysql_pass $database -A -Bse "repair table $arg")
fi
# echo $(mysql -h$mysql_host -u$mysql_user -p$mysql_pass $database -A -Bse "optimize table $arg")
done
-----------------checkdbtable.sh結束-------------------------
4. mysql數據庫備份腳本
-----------------backupdb.sh開始-------------------------
#!/bin/bash
predir=`pwd`
dir=`dirname $0`
cd "${dir}"
DB_DATABASE=databasename
DB_USR=username
DB_PWD=userpassword
BACKDIR=../backup/db
LOG_PATH=../backup/log
DATE=`date +%Y.%m.%d.%H.%M.%S`
targetFile=$BACKDIR/db.$DATE.tar.gz
if [ $# = 1 ];then
targetFile=$1
fi
mkdir -p $LOG_PATH
echo "backupdb begin">>${LOG_PATH}/dailyMaintenace.log
mkdir -p $BACKDIR
mysqldump -u"${DB_USR}" -p"${DB_PWD}" $DB_DATABASE >$DB_DATABASE.$DATE.sql
tar -zcf $targetFile $DB_DATABASE.$DATE.sql
rm -rf $DB_DATABASE.$DATE.sql
echo "backupdb done">>${LOG_PATH}/dailyMaintenace.log
cd "${predir}"
-----------------backupdb.sh結束-------------------------
5. mysql數據庫備份恢復腳本
-----------------recoverdb.sh開始-------------------------
#!/bin/bash
predir=`pwd`
dir=`dirname $0`
cd "${dir}"
if [ $# = 0 ];then
echo please specified the source sql file for recover
exit 0
fi
if [ ! -e $1 ];then
echo "there isn't the file $1"
exit 0
fi
DB_DATABASE=databasename
DB_USR=username
DB_PWD=userpassword
RECOVERDIRTEMP=../backup/db/recovertmp
echo recovering...
mkdir -p $RECOVERDIRTEMP
rm -rf $RECOVERDIRTEMP/*
tar -xzf $1 -C $RECOVERDIRTEMP/
if [ $# = 2 ];then
mysql ?-u"${DB_USR}" -p"${DB_PWD}" ?-e "drop database ?if exists ${DB_DATABASE};create database ${DB_DATABASE};"
fi
mysql -u"${DB_USR}" -p"${DB_PWD}" $DB_DATABASE < $RECOVERDIRTEMP/*.sql
rm -f $RECOVERDIRTEMP/*.sql
echo done
cd "${predir}"
-----------------recoverdb.sh結束-------------------------
6. mysql數據庫結果分析輸出csv文件腳本
-----------------export_userinfo.sh開始-------------------------
#!/bin/bash
rm -rf export_out.csv
var=0
records=()
map=""
date
while read line
do
key=`echo $line | awk -F ' ' '{print $1}'`
#echo $key
result=(`mysql rxsg2_$1 --skip-column-names -e"select p.passport, u.name, u.level, o.total_online, u.vip from mem_passport p left join (mem_user u left join mem_user_online o on o.uid=u.uid) on u.uid=p.uid where p.passport='$key'"`)
len=${#result[@]}
if [ $len -ne 5 ]; then
records[$var]="$key"
else
records[$var]="${result[0]},${result[1]},${result[2]},${result[3]},${result[4]}"
fi
#echo ${records[$var]};
var=`expr $var + 1`
#if [ $var -eq 5 ]; then
#break;
#fi
done < export_in.txt
outstr="";
echo "over";
#echo ${records[*]} > export_result.txt
for ((i=0;i
do
echo ${records[$i]} >> export_out.csv
#outstr=$outstr`echo ${map[$i]}``echo "\n"`
done
#echo $outstr > export_result.txt
date
-----------------export_userinfo.sh結束-------------------------
【參考】
http://www.cnblogs.com/end/archive/2011/07/20/2111888.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的linux中常用的shell脚本,Linux常用shell脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Activiti中的关于子流程中的并发节
- 下一篇: linux链接达梦数据库,linux下面