存档

文章标签 ‘sh’

shell脚本实现sh自动删除清理指定过期日期备份功能

2020年8月8日 没有评论

本脚本具体功能,请看脚本中备注的地方,前提条件,比如/backup/mybk下面的目录是年月日格式,比如:20200801(我的备份目录中,还有一个now文件夹也保留),大家可以自行修改为自己的代码,免费拿走。

#!/bin/bash
ROOT_UID=0
E_NOTROOT=67
if [ "$UID" -ne "$ROOT_UID" ]
then
        echo "Must be root to run this script"
        exit $E_NOTROT
fi

#配置需要操作的备份目录
backupDir=/backup/mybk

:<<!
#本脚本可以实现:(假设当前月是202008)
#保留当前备份文件夹now
#保留当前月备份文件夹:202008
#保留当前月后3个月备份文件夹:202007+202006+202005
#保留当前月后9个月备份文件夹中日期最大的一份(删除其他):202004+202003+202002+202001+201912+201911+201910+201909+201908
!


function arrDelete(){
	#把传递过来的数组作为arr
	arr=$1

	#找出数组中的最大值,初始值为0
	MAX=0
	for v in ${arr[@]}
	do
		if [[ $MAX -le $v ]]
		then
		    MAX=$v
		fi
	done

	#再循环一遍,比较大小,找到应该删除的文件夹
	for v in ${arr[@]}
	do
		if [[ $MAX -ne $v ]]
		then
			echo "不是当月最大,删除:"$backupDir"/"$v
			rm -rf $backupDir"/"$v
		fi
	done
}

function read_dir(){

	monthAgo0=$(date +%Y%m)
	monthAgo1=$(date "-d 1 month ago" +%Y%m)
	monthAgo2=$(date "-d 2 month ago" +%Y%m)
	monthAgo3=$(date "-d 3 month ago" +%Y%m)
	monthAgo4=$(date "-d 4 month ago" +%Y%m)
	monthAgo5=$(date "-d 5 month ago" +%Y%m)
	monthAgo6=$(date "-d 6 month ago" +%Y%m)
	monthAgo7=$(date "-d 7 month ago" +%Y%m)
	monthAgo8=$(date "-d 8 month ago" +%Y%m)
	monthAgo9=$(date "-d 9 month ago" +%Y%m)
	monthAgo10=$(date "-d 10 month ago" +%Y%m)
	monthAgo11=$(date "-d 11 month ago" +%Y%m)
	monthAgo12=$(date "-d 12 month ago" +%Y%m)

	for file in `ls $1` #注意此处这是两个反引号,表示运行系统命令
	do
		if [ -d $1"/"$file ] #注意此处之间一定要加上空格,否则会报错
	then
		if [[ $file == *now* ]]
		then
			echo "now,保留全部:"$1"/"$file
		elif [[ $file == *$monthAgo0* ]]
		then
			echo "当月,保留全部:"$1"/"$file
		elif [[ $file == *$monthAgo1* ]] || [[ $file == *$monthAgo2* ]] || [[ $file == *$monthAgo3* ]]
		then
			echo "最近3个月,保留全部:"$1"/"$file
		elif [[ $file == *$monthAgo4* ]]
		then
			arrmonthAgo4[${#arrmonthAgo4[@]}]=$file
		elif [[ $file == *$monthAgo5* ]]
		then
			arrmonthAgo5[${#arrmonthAgo5[@]}]=$file
		elif [[ $file == *$monthAgo6* ]]
		then
			arrmonthAgo6[${#arrmonthAgo6[@]}]=$file
		elif [[ $file == *$monthAgo7* ]]
		then
			arrmonthAgo7[${#arrmonthAgo7[@]}]=$file
		elif [[ $file == *$monthAgo8* ]]
		then
			arrmonthAgo8[${#arrmonthAgo8[@]}]=$file
		elif [[ $file == *$monthAgo9* ]]
		then
			arrmonthAgo9[${#arrmonthAgo9[@]}]=$file
		elif [[ $file == *$monthAgo10* ]]
		then
			arrmonthAgo10[${#arrmonthAgo10[@]}]=$file
		elif [[ $file == *$monthAgo11* ]]
		then
			arrmonthAgo11[${#arrmonthAgo11[@]}]=$file
		elif [[ $file == *$monthAgo12* ]]
		then
			arrmonthAgo12[${#arrmonthAgo12[@]}]=$file
		else
			echo "超过12个月,删除:"$1"/"$file
			rm -rf $1"/"$file
		fi
	else
		echo "is file,skip:"$1"/"$file
	fi
	done

	#循环各个数组,删除其中不是最大的一个文件夹
	#注意:传递数组为参数,必须要用引号扩起来,否则只能获取到第一个下标
	arrDelete "${arrmonthAgo4[*]}"
	arrDelete "${arrmonthAgo5[*]}"
	arrDelete "${arrmonthAgo6[*]}"
	arrDelete "${arrmonthAgo7[*]}"
	arrDelete "${arrmonthAgo8[*]}"
	arrDelete "${arrmonthAgo9[*]}"
	arrDelete "${arrmonthAgo10[*]}"
	arrDelete "${arrmonthAgo11[*]}"
	arrDelete "${arrmonthAgo12[*]}"
}

#遍历备份目录并操作
read_dir $backupDir

分类: ubuntu高手 标签: , , , , ,

linux下ubuntu乌班图使用scp命令复制文件

2020年4月29日 没有评论

在linux系统中(我使用的是ubuntu乌班图)如何使用scp命令跨服务器服务文件?
我们之前推荐了:ubuntu配置rsync实现2台服务器数据同步功能

那么如何使用另外一种命令scp呢,scp支持本服务器不同目录之间复制,也支持跨服务器之间复制,但是我们发现使用scp却又一个问题,那就是需要在终端输入密码,可是往往我们使用shell脚本执行scp的时候不可能手动输入密码,那么接下来的代码就可以解决这个问题:

第一步,安装expect

sudo apt-get install expect

第二步,书写shell脚本

#!/usr/bin/expect -f
#将192.168.1.110上root账户下的/backup/下面的所有文件复制到本机/backup2/目录下
spawn scp -r root@192.168.1.110:/backup/* /backup2/
expect "*password:"
send "thornyzhl1987\n"
expect eof

以上sh脚本即可linux下ubuntu乌班图使用scp命令复制文件

当然,我们发现使用scp命令不能像cp -n一样跳过已存在的文件,所以还是推荐用本文章一开始说的rsync命令操作吧。

分类: ubuntu高手 标签: , , , , ,

阿里云aliyun使用rsync同步不执行的解决方案

2020年4月20日 没有评论

阿里云aliyun使用rsync同步不执行的解决方案:

当我们ubuntu配置rsync实现2台服务器数据同步功能的时候,在阿里云2台服务器之前使用的时候,可能会导致sh脚本无法执行,原因是因为ping不同,经过排查是rsync使用的默认端口873没有在安全组里面添加

所以打开阿里云的每台服务器的安全组,将端口873设置为允许即可(在设置ip的时候,只要填写另外一台的外网ip和内网ip即可)

看看阿里云的sh脚本代码是怎么写的

2015年7月28日 没有评论

#!/bin/bash

####################################################################

ip_route_helper() {
net1=’100.64.0.0/10′
net2=’11.0.0.0/8′

gw=$(ip r get 10.0.0.0 | awk ‘/via/ {print $3}’)

[[ -z “$gw” ]] && error “Error: the default gw: [$gw] is empty”

route_entry_1=”$net1 via $gw dev eth0″
route_entry_2=”$net2 via $gw dev eth0″

if ! ip route | grep -q “$net1” ; then
ip route add $route_entry_1 || error “Error: failed to add $route_entry_1”
fi
if ! ip route | grep -q “$net2” ; then
ip route add $route_entry_2 || error “Error: failed to add $route_entry_2″
fi

}

change_redhat_routes() {
route_conf_file=/etc/sysconfig/network-scripts/route-eth0
[[ -f $route_conf_file ]] && cp $route_conf_file ${route_conf_file}.original

ip_route_helper

route_entry_1=”$net1 via $gw dev eth0″
route_entry_2=”$net2 via $gw dev eth0”

if ! grep -q “100\.64\.0\.0” $route_conf_file >& /dev/null; then
echo “$route_entry_1” >> $route_conf_file
fi

if ! grep -q “11\.0\.0\.0” $route_conf_file >& /dev/null; then
echo “$route_entry_2″ >> $route_conf_file
fi
}

change_ubuntu_routes() {
route_conf_file=/etc/network/interfaces
[[ -f $route_conf_file ]] && cp $route_conf_file ${route_conf_file}.original

ip_route_helper

route_entry_1=”up route add -net 100.64.0.0 netmask 255.192.0.0 gw $gw dev eth0″
route_entry_2=”up route add -net 11.0.0.0   netmask 255.0.0.0   gw $gw dev eth0”

if ! grep -q “100\.64\.0\.0” $route_conf_file >& /dev/null ; then
echo “$route_entry_1” >>  $route_conf_file
fi
if ! grep -q “11\.0\.0\.0” $route_conf_file >& /dev/null ; then
echo “$route_entry_2″ >>  $route_conf_file
fi
}

change_suse_routes() {
route_conf_file=/etc/sysconfig/network/ifroute-eth0
[[ -f $route_conf_file ]] && cp $route_conf_file ${route_conf_file}.original

ip_route_helper

route_entry_1=”100.64.0.0 $gw 10 eth0″
route_entry_2=”11.0.0.0 $gw 8 eth0”

if ! grep -q “100\.64\.0\.0” $route_conf_file >& /dev/null; then
echo “$route_entry_1” >>  $route_conf_file
fi
if ! grep -q “11\.0\.0\.0” $route_conf_file >& /dev/null; then
echo “$route_entry_2” >>  $route_conf_file
fi
}

change_gentoo_routes() {
route_conf_file=/etc/conf.d/net
[[ -f $route_conf_file ]] && cp $route_conf_file ${route_conf_file}.original
gw=$(route -n | awk ‘/^0.0.0.0/ {print $2}’)

if ! route -n | grep -q ‘100\.64\.0\.0′ ; then
route add -net 100.64.0.0/10 gw $gw eth0 || error “Error: failed to add 100.64.0.0/10”
fi
if ! route -n | grep -q ’11\.0\.0\.0’ ; then
route add -net 11.0.0.0/8 gw $gw eth0 || error “Error: failed to add 11.0.0.0/8”
fi

if ! grep -q ‘routes_eth0’ $route_conf_file >& /dev/null; then
echo “routes_eth0=(\”100.64.0.0/10 via $gw\” \”11.0.0.0/8 via $gw\”)” >> $route_conf_file
else
if ! grep -q ‘100\.64\.0\.0′ $route_conf_file >& /dev/null; then
sed -i “s#\(routes_eth0=.*\))#\1 \”100.64.0.0/10 via $gw\”\)#” $route_conf_file
fi
if ! grep -q ’11\.0\.0\.0’ $route_conf_file >& /dev/null; then
sed -i “s#\(routes_eth0=.*\))#\1 \”11.0.0.0/8 via $gw\”\)#” $route_conf_file
fi
fi
}

change_coreos_routes() {
route_conf_file=/etc/systemd/network/10-eth0.network
[[ -f $route_conf_file ]] && cp $route_conf_file ${route_conf_file}.original

ip_route_helper

if ! grep -q ‘100.64.0.0’ $route_conf_file >& /dev/null; then
cat >> $route_conf_file << EOF
[Route]
Destination=100.64.0.0/10
Gateway=$gw
EOF
fi

if ! grep -q ‘11.0.0.0’ $route_conf_file >& /dev/null; then
cat >> $route_conf_file << EOF
[Route]
Destination=11.0.0.0/8
Gateway=$gw
EOF
fi
}

####################################################################

error() {
echo $1
exit 1
}

change_routes() {

result=$(egrep -o ‘Ubuntu|Red Hat|SUSE|Debian|Gentoo|Gentoo Hardened|AliCloud’ /proc/version | uniq | head -n 1)
case $result in
‘Ubuntu’ | ‘Debian’)
change_ubuntu_routes
;;
‘Red Hat’ | ‘AliCloud’)
change_redhat_routes
;;
‘SUSE’)
change_suse_routes
;;
‘Gentoo’)
change_gentoo_routes
;;
‘Gentoo Hardened’)
change_coreos_routes
;;
*)
error “Error: unknow platform: [$result]”
;;
esac
echo ‘add route 11.0.0.0/8 100.64.0.0/10 success !’
}

change_routes

####################################################################

分类: 张宏良张洪量 标签: , ,
css.php