shell脚本注意事项

1)开头加解释器:#!/bin/bash

2)语法缩进,使用四个空格;多加注释说明。

3)命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用。

4)默认变量是全局的,在函数中变量local指定为局部变量,避免污染其他作用域。

5)有两个命令能帮助我调试脚本:set -e 遇到执行非0时退出脚本,set-x 打印执行过程。  

6)写脚本一定先测试再到生产上。

shell基本命令

(1)ps aux    显示系统全部进程,一行一个
(2)grep “abc” 从标准输入读取字符流,输出包含字符串“abc”的行
(3)grep -v "acb"   从标准输入读取字符流,输出不包含字符串“abc”的行
(4)wc -l        从标准输入读取字符流,输出行数

例如需要检测进程httpd是否存在,操作流程如下:
(1)读取系统所有进程
(2)判断包含指定进程名字的信息是否存在
通过管道连接,命令如下:

ps axu      |    grep "httpd"           |      grep -v "grep"    |      wc -l
所有进程-->获取包含“httpd”的行-->删除grep进程信息-->输出最后的行数

通过判断命令的执行结果是否为 0 ,可以知道进程是否存在。

脚本如下:

1

2

3

4

5

6

7

8

9

10

11

#!/bin/sh

while true;do

    count=`ps -ef|grep http|grep -v grep`

    if [ "$?" != "0" ];then

echo  ">>>>no httpd,run it"

service httpd start

else

echo ">>>>httpd is runing..."

fi

sleep 5

done

运维常用脚本命令

在日常工作过程中,经常要对服务器进行一些操作,整理了一些常用的一句话shell命令。

1、查找当前目录下占用为0字节的文件并删除

find ./ -type f -size 0 -exec rm -rf {}\;    #此命令不要用于对根目录0字节文件的操作

2、将系统进程按内存占用大小排列显示出来

ps -e  -o “%C   : %p : %z : %a”|sort -k5-nr   

3、将系统进程按CPU占用大小排列显示

ps -e  -o “%C   : %p : %z : %a”|sort   -nr

4、匹配某文件中某一行并进行内容替换

sed -i ‘/Root/s/no/yes’/ etc/ssh/sshd_config    #先匹配到Root,再将此行no替换为yes

5、显示所有运行级别为3并开机启动的服务

ls /etc/rc3.d/S* |cut -c 15-    #rc3.d中S开头即为运行级别3的服务,并用cut截取第15个字符后面的内容

6、取得eth0网卡的IP地址 

方法1:ifconfig   | grep ‘inet addr:’| grep -v ’127.0.0.1′ | cut -d:-f2 | awk ‘{ print $1}’

方法2:ifconfig eth0 |grep “inet addr:” |awk ‘{print $2}’|cut -c 6-

方法3: ip addr |grep "inet"|awk '{print $2}'| awk -F "/" '{print $1}'

7、TCP抓包工具分析80端口数据流

tcpdump -c 10000 -i eth0 -n dst port 80

8、查询昨天的日期

date –date=yesterday

9、删除所有空目录

find /data -type d -empty -exec rm -rf {};    #最好不要在/目录下执行此命令

10、删除5天前的文件

find /data -mtime +5 -type f -exec rm -rf{};

11、强制踢出终端用户

pkill -KILL -t pts/1

12、将来自80端口的请求转发到8080端口

iptables -A PREROUTING -p tcp -m tcp –dport80 -j DNAT –to-destination 127.0.0.1:8080

13、Linux服务器之间传文件

scp ~/test.txtroot@192.168.0.10:/data/    #将个人主目录下test.txt传到远程主机的/data目录下

14、对大文件进行分割

split -l 1000 message.log message    #按每个文件1000行来分割

split -b 5m message.log message    #按每个文件5M来分割

15、杀掉80端口相关的进程

   lsof -i :80|grep -v "PID"|awk '{print "kill -9",$2}'|sh

Logo

更多推荐