Shell脚本在线编辑

早就头疼了在黑框里面写shell了吧,要么就在txt里面写脚本,着实过了一把高手的瘾,但是有些事情总是看起来很美的,

神神秘秘的在屏幕面前捣鼓半天,然后在服务器运行,好么,一大堆的报错信息,顿时想死的心都有了吧~

于是乎,给大家分享个网站吧:http://www.shellcheck.net/

不用谢!

 

 

linux单点登录shell

网上查了很多,没有效果,自己写了一个,虽然有点次,但是功能还是能实现了.废话少说,看shell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/bin/sh
 
function main 
{ 
	lines=`ps -eo user,pid,cmd | grep -v root |grep sshd`;
	tmp=0;
	array=();
	for i in ${lines[*]}
	do			
		if [ $(($tmp%4)) -eq 0 -o $(($tmp%4)) -eq 1 ]
		then						
			array=(${array[@]} $i);		
		fi		
		tmp=$(($tmp+1));
	done
 
	for i in ${array[*]}
	do
		tmp=0;
		for((j=0;j< ${#array[*]};++j))
		do
			p=${array[$j]};
			if [ "$i" == "$p" ]
			then
				tmp=$(($tmp+1));
			fi
			if [ $tmp -eq 2 ]
			then
				p=${array[$(($j+1))]};
				kstr=`kill -9 $p`;
				echo $kstr;
				break;
			fi
 
		done
	done
 
}
while [ 2 -ge 1 ]
do
	main;
	sleep 2;
done

shell监控服务脚本

最近频繁发现服务老是莫名停止,于是写一个简单的监控shell程序,以防在半夜突发情况来应急。

1
2
3
4
5
6
7
8
#!/bin/bash
ria=`ps -ef | grep java | grep -v portalAgent | awk '{if($3==1)print $3}'`
if [ "$ria"=="" ]; then
tdate=`date +%Y/%m/%d-%T`
/home/T3-2.8/2.4ria/riaServer/start.sh &amp;
echo "$tdate &gt;&gt; /home/T3-2.8/2.4ria/riaServer/start.sh &amp;" &gt;&gt; /home/ria.log
fi
exit 0

 

这个脚本修改一下可以完成其他程序的监控,当然也能完善做出来很多事情。其实编程语言只不过是一种工具,何必纠结那个更好,甚至非要争个高下。
在不同的场景用不同的方法才是最高境界,毕竟人是主导程序,而不是程序主导人。

在shell中需要注意的是 if then 语句,在[]中开始和结束需要有空格,否则会出现:
syntax error near unexpected token `then’

新的监控脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/sh 
ria=$(ps -ef | grep com.palmtx.main.Main | awk '{if($3==1)print $3}')
tdate=`date +%Y/%m/%d-%T`
if [ "$ria" = "" ]
then
	echo "$tdate ria is need start"
	cd /home/2qi_home/riaServer
	./start.sh &
	echo "$tdate ria is need start" >> /home/ria.log
else  
	echo "$tdate ria is not need start"
	echo "$tdate ria is running and don't need start" >>/home/ria.log
fi
exit 0

FTP上传脚本

1
2
3
4
5
6
7
8
9
10
11
#! /bin/bash
cd /home/log
filedat=client_uservisit_$(date -d last-hour +"%Y%m%d%H")_0000.dat
ftp -v -n -oPort=端口号 IP地址 << end
user 用户名 密码
cd client_data
put $filedat
bye
end
cd /home/log
mv $filedat ../cdrbak/

shell 添加jar到classpath

我们写应用程序的时候需要写Shell来做启动,那么手工添加jar到环境变量太悲催了吧,既然用shell来做的话,那么shell能做的更多:)

EG: 我们把/home/tmsp/apache-tomcat-6.0.35/lib/* 目录下的所有jar 都导入环境变量。

1
2
3
4
for i in /home/tmsp/apache-tomcat-6.0.35/lib/*; 
do CLASSPATH=$i:"$CLASSPATH"; 
done 
echo "$CLASSPATH"

shell 监控网卡流量

需要统计网卡流量,除了依赖其他第三方的统计外,只能自己写了,原因你懂吧?:),因为生产环境没办法啊,只能自己写啊,悲催哇。

这个是统计packets的信息,可能1和9会更准一些,不过我也不清楚了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
eth=$1
mkdir -p /home/tmsp
while [ "1" ]
RXpre=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $2}')
TXpre=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $10}')
sleep 1
do
RXnext=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $2}')
TXnext=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $10}')
ctime=$(date "+%Y-%m-%d %H:%M:%S")
RX=$((${RXnext}-${RXpre}))
TX=$((${TXnext}-${TXpre}))
echo "$ctime|RX:$RX|TX:$TX|TRX:$RXnext|TTX:$TXnext" >> /home/tmsp/$1.log
sleep 1
done

这个是简单的记录信息,那么需要后续的工作还很多,比如脚本切割,比如话单入库等等,后续完善吧。

PS:最后补充如何运行,如果你保存为 nic.sh 先给执行权限chmod +x nic.sh 然后运行,./nic.sh eth0 参数是你想要监控的网卡信息。

不足之处,不能监控到具体的端口,目前迷惘中。欢迎指点。